From 919fea438a5ac5366684cfa26d2bb3d17519cb60 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Mon, 18 May 2015 10:55:20 -0700 Subject: Ported upb to C89, for greater portability. A large part of this change contains surface-level porting, like moving variable declarations to the top of the block. However there are a few more substantial things too: - moved internal-only struct definitions to a separate file (structdefs.int.h), for greater encapsulation and ABI compatibility. - removed the UPB_UPCAST macro, since it requires access to the internal-only struct definitions. Replaced uses with calls to inline, type-safe casting functions. - removed the UPB_DEFINE_CLASS/UPB_DEFINE_STRUCT macros. Class and struct definitions are now more explicit -- you get to see the actual class/struct keywords in the source. The casting convenience functions have been moved into UPB_DECLARE_DERIVED_TYPE() and UPB_DECLARE_DERIVED_TYPE2(). - the new way that we duplicate base methods in derived types is also more convenient and requires less duplication. It is also less greppable, but hopefully that is not too big a problem. Compiler flags (-std=c89 -pedantic) should help to rigorously enforce that the code is free of C99-isms. A few functions are not available in C89 (strtoll). There are temporary, hacky solutions in place. --- upb/handlers-inl.h | 391 ++++++++++++++++++++++++++--------------------------- 1 file changed, 190 insertions(+), 201 deletions(-) (limited to 'upb/handlers-inl.h') diff --git a/upb/handlers-inl.h b/upb/handlers-inl.h index 70ddf91..444ca76 100644 --- a/upb/handlers-inl.h +++ b/upb/handlers-inl.h @@ -13,21 +13,56 @@ #include -// Type detection and typedefs for integer types. -// For platforms where there are multiple 32-bit or 64-bit types, we need to be -// able to enumerate them so we can properly create overloads for all variants. -// -// If any platform existed where there were three integer types with the same -// size, this would have to become more complicated. For example, short, int, -// and long could all be 32-bits. Even more diabolically, short, int, long, -// and long long could all be 64 bits and still be standard-compliant. -// However, few platforms are this strange, and it's unlikely that upb will be -// used on the strangest ones. - -// Can't count on stdint.h limits like INT32_MAX, because in C++ these are -// only defined when __STDC_LIMIT_MACROS are defined before the *first* include -// of stdint.h. We can't guarantee that someone else didn't include these first -// without defining __STDC_LIMIT_MACROS. +/* C inline methods. */ + +/* upb_bufhandle */ +UPB_INLINE void upb_bufhandle_init(upb_bufhandle *h) { + h->obj_ = NULL; + h->objtype_ = NULL; + h->buf_ = NULL; + h->objofs_ = 0; +} +UPB_INLINE void upb_bufhandle_uninit(upb_bufhandle *h) { + UPB_UNUSED(h); +} +UPB_INLINE void upb_bufhandle_setobj(upb_bufhandle *h, const void *obj, + const void *type) { + h->obj_ = obj; + h->objtype_ = type; +} +UPB_INLINE void upb_bufhandle_setbuf(upb_bufhandle *h, const char *buf, + size_t ofs) { + h->buf_ = buf; + h->objofs_ = ofs; +} +UPB_INLINE const void *upb_bufhandle_obj(const upb_bufhandle *h) { + return h->obj_; +} +UPB_INLINE const void *upb_bufhandle_objtype(const upb_bufhandle *h) { + return h->objtype_; +} +UPB_INLINE const char *upb_bufhandle_buf(const upb_bufhandle *h) { + return h->buf_; +} + + +#ifdef __cplusplus + +/* Type detection and typedefs for integer types. + * For platforms where there are multiple 32-bit or 64-bit types, we need to be + * able to enumerate them so we can properly create overloads for all variants. + * + * If any platform existed where there were three integer types with the same + * size, this would have to become more complicated. For example, short, int, + * and long could all be 32-bits. Even more diabolically, short, int, long, + * and long long could all be 64 bits and still be standard-compliant. + * However, few platforms are this strange, and it's unlikely that upb will be + * used on the strangest ones. */ + +/* Can't count on stdint.h limits like INT32_MAX, because in C++ these are + * only defined when __STDC_LIMIT_MACROS are defined before the *first* include + * of stdint.h. We can't guarantee that someone else didn't include these first + * without defining __STDC_LIMIT_MACROS. */ #define UPB_INT32_MAX 0x7fffffffLL #define UPB_INT32_MIN (-UPB_INT32_MAX - 1) #define UPB_INT64_MAX 0x7fffffffffffffffLL @@ -49,8 +84,8 @@ #define UPB_LLONG_IS_64BITS 1 #endif -// We use macros instead of typedefs so we can undefine them later and avoid -// leaking them outside this header file. +/* We use macros instead of typedefs so we can undefine them later and avoid + * leaking them outside this header file. */ #if UPB_INT_IS_32BITS #define UPB_INT32_T int #define UPB_UINT32_T unsigned int @@ -59,12 +94,12 @@ #define UPB_TWO_32BIT_TYPES 1 #define UPB_INT32ALT_T long #define UPB_UINT32ALT_T unsigned long -#endif // UPB_LONG_IS_32BITS +#endif /* UPB_LONG_IS_32BITS */ -#elif UPB_LONG_IS_32BITS // && !UPB_INT_IS_32BITS +#elif UPB_LONG_IS_32BITS /* && !UPB_INT_IS_32BITS */ #define UPB_INT32_T long #define UPB_UINT32_T unsigned long -#endif // UPB_INT_IS_32BITS +#endif /* UPB_INT_IS_32BITS */ #if UPB_LONG_IS_64BITS @@ -75,12 +110,12 @@ #define UPB_TWO_64BIT_TYPES 1 #define UPB_INT64ALT_T long long #define UPB_UINT64ALT_T unsigned long long -#endif // UPB_LLONG_IS_64BITS +#endif /* UPB_LLONG_IS_64BITS */ -#elif UPB_LLONG_IS_64BITS // && !UPB_LONG_IS_64BITS +#elif UPB_LLONG_IS_64BITS /* && !UPB_LONG_IS_64BITS */ #define UPB_INT64_T long long #define UPB_UINT64_T unsigned long long -#endif // UPB_LONG_IS_64BITS +#endif /* UPB_LONG_IS_64BITS */ #undef UPB_INT32_MAX #undef UPB_INT32_MIN @@ -91,56 +126,22 @@ #undef UPB_LONG_IS_64BITS #undef UPB_LLONG_IS_64BITS -// C inline methods. - -// upb_bufhandle -UPB_INLINE void upb_bufhandle_init(upb_bufhandle *h) { - h->obj_ = NULL; - h->objtype_ = NULL; - h->buf_ = NULL; - h->objofs_ = 0; -} -UPB_INLINE void upb_bufhandle_uninit(upb_bufhandle *h) { - UPB_UNUSED(h); -} -UPB_INLINE void upb_bufhandle_setobj(upb_bufhandle *h, const void *obj, - const void *type) { - h->obj_ = obj; - h->objtype_ = type; -} -UPB_INLINE void upb_bufhandle_setbuf(upb_bufhandle *h, const char *buf, - size_t ofs) { - h->buf_ = buf; - h->objofs_ = ofs; -} -UPB_INLINE const void *upb_bufhandle_obj(const upb_bufhandle *h) { - return h->obj_; -} -UPB_INLINE const void *upb_bufhandle_objtype(const upb_bufhandle *h) { - return h->objtype_; -} -UPB_INLINE const char *upb_bufhandle_buf(const upb_bufhandle *h) { - return h->buf_; -} - - -#ifdef __cplusplus namespace upb { typedef void CleanupFunc(void *ptr); -// Template to remove "const" from "const T*" and just return "T*". -// -// We define a nonsense default because otherwise it will fail to instantiate as -// a function parameter type even in cases where we don't expect any caller to -// actually match the overload. +/* Template to remove "const" from "const T*" and just return "T*". + * + * We define a nonsense default because otherwise it will fail to instantiate as + * a function parameter type even in cases where we don't expect any caller to + * actually match the overload. */ class CouldntRemoveConst {}; template struct remove_constptr { typedef CouldntRemoveConst type; }; template struct remove_constptr { typedef T *type; }; -// Template that we use below to remove a template specialization from -// consideration if it matches a specific type. +/* Template that we use below to remove a template specialization from + * consideration if it matches a specific type. */ template struct disable_if_same { typedef void Type; }; template struct disable_if_same {}; @@ -177,27 +178,27 @@ bool is_same::value = false; template bool is_same::value = true; -// FuncInfo //////////////////////////////////////////////////////////////////// +/* FuncInfo *******************************************************************/ -// Info about the user's original, pre-wrapped function. +/* Info about the user's original, pre-wrapped function. */ template struct FuncInfo { - // The type of the closure that the function takes (its first param). + /* The type of the closure that the function takes (its first param). */ typedef C Closure; - // The return type. + /* The return type. */ typedef R Return; }; -// Func //////////////////////////////////////////////////////////////////////// +/* Func ***********************************************************************/ -// Func1, Func2, Func3: Template classes representing a function and its -// signature. -// -// Since the function is a template parameter, calling the function can be -// inlined at compile-time and does not require a function pointer at runtime. -// These functions are not bound to a handler data so have no data or cleanup -// handler. +/* Func1, Func2, Func3: Template classes representing a function and its + * signature. + * + * Since the function is a template parameter, calling the function can be + * inlined at compile-time and does not require a function pointer at runtime. + * These functions are not bound to a handler data so have no data or cleanup + * handler. */ struct UnboundFunc { CleanupFunc *GetCleanup() { return NULL; } void *GetData() { return NULL; } @@ -242,13 +243,13 @@ struct Func5 : public UnboundFunc { } }; -// BoundFunc /////////////////////////////////////////////////////////////////// +/* BoundFunc ******************************************************************/ -// BoundFunc2, BoundFunc3: Like Func2/Func3 except also contains a value that -// shall be bound to the function's second parameter. -// -// Note that the second parameter is a const pointer, but our stored bound value -// is non-const so we can free it when the handlers are destroyed. +/* BoundFunc2, BoundFunc3: Like Func2/Func3 except also contains a value that + * shall be bound to the function's second parameter. + * + * Note that the second parameter is a const pointer, but our stored bound value + * is non-const so we can free it when the handlers are destroyed. */ template struct BoundFunc { typedef typename remove_constptr::type MutableP2; @@ -288,13 +289,13 @@ struct BoundFunc5 : public BoundFunc { explicit BoundFunc5(typename Base::MutableP2 arg) : Base(arg) {} }; -// FuncSig ///////////////////////////////////////////////////////////////////// +/* FuncSig ********************************************************************/ -// FuncSig1, FuncSig2, FuncSig3: template classes reflecting a function -// *signature*, but without a specific function attached. -// -// These classes contain member functions that can be invoked with a -// specific function to return a Func/BoundFunc class. +/* FuncSig1, FuncSig2, FuncSig3: template classes reflecting a function + * *signature*, but without a specific function attached. + * + * These classes contain member functions that can be invoked with a + * specific function to return a Func/BoundFunc class. */ template struct FuncSig1 { template @@ -359,41 +360,41 @@ struct FuncSig5 { } }; -// Overloaded template function that can construct the appropriate FuncSig* -// class given a function pointer by deducing the template parameters. +/* Overloaded template function that can construct the appropriate FuncSig* + * class given a function pointer by deducing the template parameters. */ template inline FuncSig1 MatchFunc(R (*f)(P1)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return FuncSig1(); } template inline FuncSig2 MatchFunc(R (*f)(P1, P2)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return FuncSig2(); } template inline FuncSig3 MatchFunc(R (*f)(P1, P2, P3)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return FuncSig3(); } template inline FuncSig4 MatchFunc(R (*f)(P1, P2, P3, P4)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return FuncSig4(); } template inline FuncSig5 MatchFunc(R (*f)(P1, P2, P3, P4, P5)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return FuncSig5(); } -// MethodSig /////////////////////////////////////////////////////////////////// +/* MethodSig ******************************************************************/ -// CallMethod*: a function template that calls a given method. +/* CallMethod*: a function template that calls a given method. */ template R CallMethod0(C *obj) { return ((*obj).*F)(); @@ -420,10 +421,10 @@ R CallMethod4(C *obj, P1 arg1, P2 arg2, P3 arg3, P4 arg4) { return ((*obj).*F)(arg1, arg2, arg3, arg4); } -// MethodSig: like FuncSig, but for member functions. -// -// GetFunc() returns a normal FuncN object, so after calling GetFunc() no -// more logic is required to special-case methods. +/* MethodSig: like FuncSig, but for member functions. + * + * GetFunc() returns a normal FuncN object, so after calling GetFunc() no + * more logic is required to special-case methods. */ template struct MethodSig0 { template @@ -504,61 +505,61 @@ struct MethodSig4 { template inline MethodSig0 MatchFunc(R (C::*f)()) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return MethodSig0(); } template inline MethodSig1 MatchFunc(R (C::*f)(P1)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return MethodSig1(); } template inline MethodSig2 MatchFunc(R (C::*f)(P1, P2)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return MethodSig2(); } template inline MethodSig3 MatchFunc(R (C::*f)(P1, P2, P3)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return MethodSig3(); } template inline MethodSig4 MatchFunc(R (C::*f)(P1, P2, P3, P4)) { - UPB_UNUSED(f); // Only used for template parameter deduction. + UPB_UNUSED(f); /* Only used for template parameter deduction. */ return MethodSig4(); } -// MaybeWrapReturn ///////////////////////////////////////////////////////////// +/* MaybeWrapReturn ************************************************************/ -// Template class that attempts to wrap the return value of the function so it -// matches the expected type. There are two main adjustments it may make: -// -// 1. If the function returns void, make it return the expected type and with -// a value that always indicates success. -// 2. If the function returns bool, make it return the expected type with a -// value that indicates success or failure. -// -// The "expected type" for return is: -// 1. void* for start handlers. If the closure parameter has a different type -// we will cast it to void* for the return in the success case. -// 2. size_t for string buffer handlers. -// 3. bool for everything else. +/* Template class that attempts to wrap the return value of the function so it + * matches the expected type. There are two main adjustments it may make: + * + * 1. If the function returns void, make it return the expected type and with + * a value that always indicates success. + * 2. If the function returns bool, make it return the expected type with a + * value that indicates success or failure. + * + * The "expected type" for return is: + * 1. void* for start handlers. If the closure parameter has a different type + * we will cast it to void* for the return in the success case. + * 2. size_t for string buffer handlers. + * 3. bool for everything else. */ -// Template parameters are FuncN type and desired return type. +/* Template parameters are FuncN type and desired return type. */ template struct MaybeWrapReturn; -// If the return type matches, return the given function unwrapped. +/* If the return type matches, return the given function unwrapped. */ template struct MaybeWrapReturn { typedef F Func; }; -// Function wrapper that munges the return value from void to (bool)true. +/* Function wrapper that munges the return value from void to (bool)true. */ template bool ReturnTrue2(P1 p1, P2 p2) { F(p1, p2); @@ -571,7 +572,7 @@ bool ReturnTrue3(P1 p1, P2 p2, P3 p3) { return true; } -// Function wrapper that munges the return value from void to (void*)arg1 +/* Function wrapper that munges the return value from void to (void*)arg1 */ template void *ReturnClosure2(P1 p1, P2 p2) { F(p1, p2); @@ -584,7 +585,7 @@ void *ReturnClosure3(P1 p1, P2 p2, P3 p3) { return p1; } -// Function wrapper that munges the return value from R to void*. +/* Function wrapper that munges the return value from R to void*. */ template void *CastReturnToVoidPtr2(P1 p1, P2 p2) { return F(p1, p2); @@ -595,7 +596,7 @@ void *CastReturnToVoidPtr3(P1 p1, P2 p2, P3 p3) { return F(p1, p2, p3); } -// Function wrapper that munges the return value from bool to void*. +/* Function wrapper that munges the return value from bool to void*. */ template void *ReturnClosureOrBreak2(P1 p1, P2 p2) { return F(p1, p2) ? p1 : UPB_BREAK; @@ -606,7 +607,7 @@ void *ReturnClosureOrBreak3(P1 p1, P2 p2, P3 p3) { return F(p1, p2, p3) ? p1 : UPB_BREAK; } -// For the string callback, which takes five params, returns the size param. +/* For the string callback, which takes five params, returns the size param. */ template size_t ReturnStringLen(P1 p1, P2 p2, const char *p3, size_t p4, @@ -615,8 +616,8 @@ size_t ReturnStringLen(P1 p1, P2 p2, const char *p3, size_t p4, return p4; } -// For the string callback, which takes five params, returns the size param or -// zero. +/* For the string callback, which takes five params, returns the size param or + * zero. */ template size_t ReturnNOr0(P1 p1, P2 p2, const char *p3, size_t p4, @@ -624,8 +625,8 @@ size_t ReturnNOr0(P1 p1, P2 p2, const char *p3, size_t p4, return F(p1, p2, p3, p4, p5) ? p4 : 0; } -// If we have a function returning void but want a function returning bool, wrap -// it in a function that returns true. +/* If we have a function returning void but want a function returning bool, wrap + * it in a function that returns true. */ template struct MaybeWrapReturn, bool> { typedef Func2, I> Func; @@ -636,8 +637,8 @@ struct MaybeWrapReturn, bool> { typedef Func3, I> Func; }; -// If our function returns void but we want one returning void*, wrap it in a -// function that returns the first argument. +/* If our function returns void but we want one returning void*, wrap it in a + * function that returns the first argument. */ template struct MaybeWrapReturn, void *> { typedef Func2, I> Func; @@ -648,8 +649,8 @@ struct MaybeWrapReturn, void *> { typedef Func3, I> Func; }; -// If our function returns R* but we want one returning void*, wrap it in a -// function that casts to void*. +/* If our function returns R* but we want one returning void*, wrap it in a + * function that casts to void*. */ template struct MaybeWrapReturn, void *, typename disable_if_same::Type> { @@ -663,8 +664,8 @@ struct MaybeWrapReturn, void *, Func; }; -// If our function returns bool but we want one returning void*, wrap it in a -// function that returns either the first param or UPB_BREAK. +/* If our function returns bool but we want one returning void*, wrap it in a + * function that returns either the first param or UPB_BREAK. */ template struct MaybeWrapReturn, void *> { typedef Func2, I> Func; @@ -676,8 +677,8 @@ struct MaybeWrapReturn, void *> { Func; }; -// If our function returns void but we want one returning size_t, wrap it in a -// function that returns the size argument. +/* If our function returns void but we want one returning size_t, wrap it in a + * function that returns the size argument. */ template struct MaybeWrapReturn< @@ -687,8 +688,8 @@ struct MaybeWrapReturn< ReturnStringLen, I> Func; }; -// If our function returns bool but we want one returning size_t, wrap it in a -// function that returns either 0 or the buf size. +/* If our function returns bool but we want one returning size_t, wrap it in a + * function that returns either 0 or the buf size. */ template struct MaybeWrapReturn< @@ -698,16 +699,16 @@ struct MaybeWrapReturn< ReturnNOr0, I> Func; }; -// ConvertParams /////////////////////////////////////////////////////////////// +/* ConvertParams **************************************************************/ -// Template class that converts the function parameters if necessary, and -// ignores the HandlerData parameter if appropriate. -// -// Template parameter is the are FuncN function type. +/* Template class that converts the function parameters if necessary, and + * ignores the HandlerData parameter if appropriate. + * + * Template parameter is the are FuncN function type. */ template struct ConvertParams; -// Function that discards the handler data parameter. +/* Function that discards the handler data parameter. */ template R IgnoreHandlerData2(void *p1, const void *hd) { UPB_UNUSED(hd); @@ -741,7 +742,7 @@ R IgnoreHandlerDataIgnoreHandle(void *p1, const void *hd, const char *p2, return F(static_cast(p1), p2, p3); } -// Function that casts the handler data parameter. +/* Function that casts the handler data parameter. */ template R CastHandlerData2(void *c, const void *hd) { return F(static_cast(c), static_cast(hd)); @@ -766,7 +767,7 @@ R CastHandlerDataIgnoreHandle(void *c, const void *hd, const char *p3, return F(static_cast(c), static_cast(hd), p3, p4); } -// For unbound functions, ignore the handler data. +/* For unbound functions, ignore the handler data. */ template struct ConvertParams, T> { typedef Func2, I> Func; @@ -780,8 +781,8 @@ struct ConvertParams, IgnoreHandlerData3, I> Func; }; -// For StringBuffer only; this ignores both the handler data and the -// BufferHandle. +/* For StringBuffer only; this ignores both the handler data and the + * BufferHandle. */ template struct ConvertParams, T> { typedef Func5, T> { IgnoreHandlerData5, I> Func; }; -// For bound functions, cast the handler data. +/* For bound functions, cast the handler data. */ template struct ConvertParams, T> { typedef Func2, I> @@ -811,7 +812,7 @@ struct ConvertParams, CastHandlerData3, I> Func; }; -// For StringBuffer only; this ignores the BufferHandle. +/* For StringBuffer only; this ignores the BufferHandle. */ template struct ConvertParams, T> { @@ -827,8 +828,8 @@ struct ConvertParams, T> { CastHandlerData5, I> Func; }; -// utype/ltype are upper/lower-case, ctype is canonical C type, vtype is -// variant C type. +/* utype/ltype are upper/lower-case, ctype is canonical C type, vtype is + * variant C type. */ #define TYPE_METHODS(utype, ltype, ctype, vtype) \ template <> struct CanonicalType { \ typedef ctype Type; \ @@ -843,22 +844,22 @@ struct ConvertParams, T> { return upb_handlers_set##ltype(this, f, handler.handler_, &handler.attr_); \ } \ -TYPE_METHODS(Double, double, double, double); -TYPE_METHODS(Float, float, float, float); -TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64_T); -TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32_T); -TYPE_METHODS(Int64, int64, int64_t, UPB_INT64_T); -TYPE_METHODS(Int32, int32, int32_t, UPB_INT32_T); -TYPE_METHODS(Bool, bool, bool, bool); +TYPE_METHODS(Double, double, double, double) +TYPE_METHODS(Float, float, float, float) +TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64_T) +TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32_T) +TYPE_METHODS(Int64, int64, int64_t, UPB_INT64_T) +TYPE_METHODS(Int32, int32, int32_t, UPB_INT32_T) +TYPE_METHODS(Bool, bool, bool, bool) #ifdef UPB_TWO_32BIT_TYPES -TYPE_METHODS(Int32, int32, int32_t, UPB_INT32ALT_T); -TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32ALT_T); +TYPE_METHODS(Int32, int32, int32_t, UPB_INT32ALT_T) +TYPE_METHODS(UInt32, uint32, uint32_t, UPB_UINT32ALT_T) #endif #ifdef UPB_TWO_64BIT_TYPES -TYPE_METHODS(Int64, int64, int64_t, UPB_INT64ALT_T); -TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64ALT_T); +TYPE_METHODS(Int64, int64, int64_t, UPB_INT64ALT_T) +TYPE_METHODS(UInt64, uint64, uint64_t, UPB_UINT64ALT_T) #endif #undef TYPE_METHODS @@ -866,7 +867,8 @@ template <> struct CanonicalType { typedef Status* Type; }; -// Type methods that are only one-per-canonical-type and not one-per-cvariant. +/* Type methods that are only one-per-canonical-type and not + * one-per-cvariant. */ #define TYPE_METHODS(utype, ctype) \ inline bool Handlers::Set##utype##Handler(const FieldDef *f, \ @@ -874,13 +876,13 @@ template <> struct CanonicalType { return SetValueHandler(f, h); \ } \ -TYPE_METHODS(Double, double); -TYPE_METHODS(Float, float); -TYPE_METHODS(UInt64, uint64_t); -TYPE_METHODS(UInt32, uint32_t); -TYPE_METHODS(Int64, int64_t); -TYPE_METHODS(Int32, int32_t); -TYPE_METHODS(Bool, bool); +TYPE_METHODS(Double, double) +TYPE_METHODS(Float, float) +TYPE_METHODS(UInt64, uint64_t) +TYPE_METHODS(UInt32, uint32_t) +TYPE_METHODS(Int64, int64_t) +TYPE_METHODS(Int32, int32_t) +TYPE_METHODS(Bool, bool) #undef TYPE_METHODS template struct ReturnOf; @@ -923,23 +925,23 @@ inline Handler::Handler(F func) ReturnWrappedFunc; handler_ = ReturnWrappedFunc().Call; - // Set attributes based on what templates can statically tell us about the - // user's function. + /* Set attributes based on what templates can statically tell us about the + * user's function. */ - // If the original function returns void, then we know that we wrapped it to - // always return ok. + /* If the original function returns void, then we know that we wrapped it to + * always return ok. */ bool always_ok = is_same::value; attr_.SetAlwaysOk(always_ok); - // Closure parameter and return type. + /* Closure parameter and return type. */ attr_.SetClosureType(UniquePtrForType()); - // We use the closure type (from the first parameter) if the return type is - // void or bool, since these are the two cases we wrap to return the closure's - // type anyway. - // - // This is all nonsense for non START* handlers, but it doesn't matter because - // in that case the value will be ignored. + /* We use the closure type (from the first parameter) if the return type is + * void or bool, since these are the two cases we wrap to return the closure's + * type anyway. + * + * This is all nonsense for non START* handlers, but it doesn't matter because + * in that case the value will be ignored. */ typedef typename FirstUnlessVoidOrBool::value EffectiveReturn; @@ -1010,19 +1012,6 @@ inline reffed_ptr Handlers::NewFrozen( const upb_handlers *h = upb_handlers_newfrozen(m, &h, callback, closure); return reffed_ptr(h, &h); } -inline bool Handlers::IsFrozen() const { return upb_handlers_isfrozen(this); } -inline void Handlers::Ref(const void *owner) const { - upb_handlers_ref(this, owner); -} -inline void Handlers::Unref(const void *owner) const { - upb_handlers_unref(this, owner); -} -inline void Handlers::DonateRef(const void *from, const void *to) const { - upb_handlers_donateref(this, from, to); -} -inline void Handlers::CheckRef(const void *owner) const { - upb_handlers_checkref(this, owner); -} inline const Status* Handlers::status() { return upb_handlers_status(this); } @@ -1138,9 +1127,9 @@ inline BytesHandler::BytesHandler() { inline BytesHandler::~BytesHandler() {} -} // namespace upb +} /* namespace upb */ -#endif // __cplusplus +#endif /* __cplusplus */ #undef UPB_TWO_32BIT_TYPES @@ -1154,4 +1143,4 @@ inline BytesHandler::~BytesHandler() {} #undef UPB_INT64ALT_T #undef UPB_UINT64ALT_T -#endif // UPB_HANDLERS_INL_H_ +#endif /* UPB_HANDLERS_INL_H_ */ -- cgit v1.2.3