From d09dd1a81a066bace2d73c21d2d83c2ae5d727d5 Mon Sep 17 00:00:00 2001 From: Ivan Shynkarenka Date: Tue, 27 Sep 2016 17:40:05 +0300 Subject: [PATCH] Extend ArgLists to support serialization/deserialization in third-party components --- fmt/format.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/fmt/format.h b/fmt/format.h index 0f471cc49130..54b739638728 100644 --- a/fmt/format.h +++ b/fmt/format.h @@ -1377,10 +1377,7 @@ class ArgList { }; internal::Arg::Type type(unsigned index) const { - unsigned shift = index * 4; - uint64_t mask = 0xf; - return static_cast( - (types_ & (mask << shift)) >> shift); + return type(types_, index); } template @@ -1397,6 +1394,8 @@ class ArgList { ArgList(ULongLong types, const internal::Arg *args) : types_(types), args_(args) {} + uint64_t types() const { return types_; } + /** Returns the argument at specified index. */ internal::Arg operator[](unsigned index) const { using internal::Arg; @@ -1422,6 +1421,13 @@ class ArgList { } return args_[index]; } + + static internal::Arg::Type type(uint64_t types, unsigned index) { + unsigned shift = index * 4; + uint64_t mask = 0xf; + return static_cast( + (types & (mask << shift)) >> shift); + } }; #define FMT_DISPATCH(call) static_cast(this)->call