You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2018/03/25 16:01:14 UTC
[trafficserver] branch master updated: CacheTool: Fix Scalar /
bwformat issues for MacOS, Ubuntu [14, 16, 17].
This is an automated email from the ASF dual-hosted git repository.
amc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new a72eb6e CacheTool: Fix Scalar / bwformat issues for MacOS, Ubuntu [14,16,17].
a72eb6e is described below
commit a72eb6e8560648f28723b36157b555ebe2585575
Author: Alan M. Carroll <am...@apache.org>
AuthorDate: Fri Mar 23 11:26:59 2018 -0500
CacheTool: Fix Scalar / bwformat issues for MacOS, Ubuntu [14,16,17].
---
cmd/traffic_cache_tool/CacheTool.cc | 16 +++++++-------
lib/ts/BufferWriter.h | 42 +++++++++++++++++--------------------
lib/ts/BufferWriterFormat.cc | 2 +-
lib/ts/Scalar.h | 30 +++++++++++++++++++++-----
4 files changed, 54 insertions(+), 36 deletions(-)
diff --git a/cmd/traffic_cache_tool/CacheTool.cc b/cmd/traffic_cache_tool/CacheTool.cc
index 6a5dbac..f1c40f6 100644
--- a/cmd/traffic_cache_tool/CacheTool.cc
+++ b/cmd/traffic_cache_tool/CacheTool.cc
@@ -26,25 +26,27 @@
#include <memory>
#include <vector>
#include <map>
-#include <ts/ink_memory.h>
-#include <ts/ink_file.h>
#include <getopt.h>
#include <system_error>
#include <string.h>
#include <fcntl.h>
#include <ctype.h>
-#include "File.h"
-#include "CacheDefs.h"
-#include "Command.h"
-#include "ts/ink_code.h"
#include <cstring>
-#include <openssl/md5.h>
#include <vector>
#include <unordered_set>
#include <time.h>
#include <bitset>
#include <inttypes.h>
+#include <ts/ink_memory.h>
+#include <ts/ink_file.h>
+#include <ts/BufferWriter.h>
+#include <ts/CryptoHash.h>
+
+#include "File.h"
+#include "CacheDefs.h"
+#include "Command.h"
+
using ts::Bytes;
using ts::Megabytes;
using ts::CacheStoreBlocks;
diff --git a/lib/ts/BufferWriter.h b/lib/ts/BufferWriter.h
index 370a697..0e9616d 100644
--- a/lib/ts/BufferWriter.h
+++ b/lib/ts/BufferWriter.h
@@ -676,38 +676,34 @@ bwformat(BufferWriter &w, BWFSpec const &spec, TextView const &tv)
return bwformat(w, spec, static_cast<string_view>(tv));
}
-//-- Integral types
-inline BufferWriter &
-bwformat(BufferWriter &w, BWFSpec const &spec, uintmax_t const &i)
-{
- return bw_fmt::Format_Integer(w, spec, i, false);
-}
-
-inline BufferWriter &
-bwformat(BufferWriter &w, BWFSpec const &spec, intmax_t const &i)
-{
- return i < 0 ? bw_fmt::Format_Integer(w, spec, -i, true) : bw_fmt::Format_Integer(w, spec, i, false);
-}
+/* Integer types.
+
+ Due to some oddities for MacOS building, need a bit more template magic here. The underlying
+ integer rendering is in @c Format_Integer which takes @c intmax_t or @c uintmax_t. For @c
+ bwformat templates are defined, one for signed and one for unsigned. These forward their argument
+ to the internal renderer. To avoid additional ambiguity the template argument is checked with @c
+ std::enable_if to invalidate the overload if the argument type isn't a signed / unsigned
+ integer. One exception to this is @c char which is handled by a previous overload in order to
+ treat the value as a character and not an integer. The overall benefit is this works for any set
+ of integer types, rather tuning and hoping to get just the right set of overloads.
+ */
-inline BufferWriter &
-bwformat(BufferWriter &w, BWFSpec const &spec, unsigned int const &i)
+template <typename I>
+auto
+bwformat(BufferWriter &w, BWFSpec const &spec, I const &i) ->
+ typename std::enable_if<std::is_unsigned<I>::value, BufferWriter &>::type
{
return bw_fmt::Format_Integer(w, spec, i, false);
}
-inline BufferWriter &
-bwformat(BufferWriter &w, BWFSpec const &spec, int const &i)
+template <typename I>
+auto
+bwformat(BufferWriter &w, BWFSpec const &spec, I const &i) ->
+ typename std::enable_if<std::is_signed<I>::value, BufferWriter &>::type
{
return i < 0 ? bw_fmt::Format_Integer(w, spec, -i, true) : bw_fmt::Format_Integer(w, spec, i, false);
}
-// Annoying but otherwise ambiguous with char
-inline BufferWriter &
-operator<<(BufferWriter &w, int const &i)
-{
- return bwformat(w, BWFSpec::DEFAULT, static_cast<intmax_t>(i));
-}
-
// std::string support
/** Print to a @c std::string
diff --git a/lib/ts/BufferWriterFormat.cc b/lib/ts/BufferWriterFormat.cc
index 2145a7d..d660e8f 100644
--- a/lib/ts/BufferWriterFormat.cc
+++ b/lib/ts/BufferWriterFormat.cc
@@ -589,7 +589,7 @@ BWF_Now(ts::BufferWriter &w, ts::BWFSpec const &spec)
w.fill(std::strftime(w.auxBuffer(), w.remaining(), "%Y%b%d:%H%M%S", std::localtime(&t)));
}
-static bool BW_INITIALIZED = []() -> bool {
+static bool BW_INITIALIZED __attribute__((unused)) = []() -> bool {
ts::bw_fmt::BWF_GLOBAL_TABLE.emplace("now", &BWF_Now);
return true;
}();
diff --git a/lib/ts/Scalar.h b/lib/ts/Scalar.h
index 783f8c2..20c1f95 100644
--- a/lib/ts/Scalar.h
+++ b/lib/ts/Scalar.h
@@ -25,13 +25,13 @@
limitations under the License.
*/
-#if !defined(TS_SCALAR_H)
-#define TS_SCALAR_H
+#pragma once
#include <cstdint>
#include <ratio>
#include <ostream>
#include <type_traits>
+#include <ts/BufferWriter.h>
namespace tag
{
@@ -911,14 +911,35 @@ namespace detail
return s;
}
template <typename T>
+ inline BufferWriter &
+ tag_label(BufferWriter &w, BWFSpec const &, tag_label_A const &)
+ {
+ return w;
+ }
+ template <typename T>
inline auto
tag_label(std::ostream &s, tag_label_B const &) -> decltype(s << T::label, s)
{
return s << T::label;
}
+ template <typename T>
+ inline auto
+ tag_label(BufferWriter &w, BWFSpec const &spec, tag_label_B const &) -> decltype(bwformat(w, spec, T::label), w)
+ {
+ return bwformat(w, spec, T::label);
+ }
} // detail
-} // namespace
+template <intmax_t N, typename C, typename T>
+BufferWriter &
+bwformat(BufferWriter &w, BWFSpec const &spec, Scalar<N, C, T> const &x)
+{
+ static constexpr ts::detail::tag_label_B b{};
+ bwformat(w, spec, x.value());
+ return ts::detail::tag_label<T>(w, spec, b);
+}
+
+} // ts
namespace std
{
@@ -938,5 +959,4 @@ template <intmax_t N, typename C, intmax_t S, typename I, typename T> struct com
typedef std::ratio<N, S> R;
typedef ts::Scalar<N / R::num, typename common_type<C, I>::type, T> type;
};
-}
-#endif // TS_SCALAR_H
+} // std
--
To stop receiving notification emails like this one, please contact
amc@apache.org.