summaryrefslogtreecommitdiff
path: root/upb/upb.h
diff options
context:
space:
mode:
authorBo Yang <teboring@google.com>2018-03-09 19:26:20 +0000
committerBo Yang <teboring@google.com>2018-03-11 16:57:44 +0000
commitf30dd0ff0cead9bb1f8f3b1b295392d75705486b (patch)
treede4d4673be3e2f0a4c1abcb259527bbb552e1646 /upb/upb.h
parent5029aa439c5f4cc2faebeae4a97ce9bcd7ca8281 (diff)
Prepare upb_value for encoding/decoding map.
Diffstat (limited to 'upb/upb.h')
-rw-r--r--upb/upb.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/upb/upb.h b/upb/upb.h
index 2d6db8e..50ac0f1 100644
--- a/upb/upb.h
+++ b/upb/upb.h
@@ -12,14 +12,23 @@
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
+#include <stdint.h>
+
#ifdef __cplusplus
namespace upb {
+class Array;
class Allocator;
class Arena;
class Environment;
class ErrorSpace;
+class Map;
+class MapIterator;
+class MessageFactory;
+class MessageLayout;
class Status;
+class Visitor;
+class VisitorPlan;
template <int N> class InlinedArena;
template <int N> class InlinedEnvironment;
}
@@ -733,6 +742,94 @@ template <int N> class upb::InlinedEnvironment : public upb::Environment {
#endif /* __cplusplus */
+UPB_DECLARE_TYPE(upb::MessageFactory, upb_msgfactory)
+UPB_DECLARE_TYPE(upb::MessageLayout, upb_msglayout)
+UPB_DECLARE_TYPE(upb::Array, upb_array)
+UPB_DECLARE_TYPE(upb::Map, upb_map)
+UPB_DECLARE_TYPE(upb::MapIterator, upb_mapiter)
+UPB_DECLARE_TYPE(upb::Visitor, upb_visitor)
+UPB_DECLARE_TYPE(upb::VisitorPlan, upb_visitorplan)
+
+UPB_BEGIN_EXTERN_C
+
+typedef void upb_msg;
+
+
+/** upb_stringview ************************************************************/
+
+typedef struct {
+ const char *data;
+ size_t size;
+} upb_stringview;
+
+UPB_INLINE upb_stringview upb_stringview_make(const char *data, size_t size) {
+ upb_stringview ret;
+ ret.data = data;
+ ret.size = size;
+ return ret;
+}
+
+#define UPB_STRINGVIEW_INIT(ptr, len) {ptr, len}
+
+
+/** upb_msgval ****************************************************************/
+
+/* A union representing all possible protobuf values. Used for generic get/set
+ * operations. */
+
+typedef union {
+ bool b;
+ float flt;
+ double dbl;
+ int32_t i32;
+ int64_t i64;
+ uint32_t u32;
+ uint64_t u64;
+ const upb_array* arr;
+ const upb_map* map;
+ const upb_msg* msg;
+ const void* ptr;
+ const char* csptr;
+ upb_func* fptr;
+ upb_stringview str;
+} upb_msgval;
+
+#define ACCESSORS(name, membername, ctype) \
+ UPB_INLINE ctype upb_msgval_get ## name(upb_msgval v) { \
+ return v.membername; \
+ } \
+ UPB_INLINE void upb_msgval_set ## name(upb_msgval *v, ctype cval) { \
+ v->membername = cval; \
+ } \
+ UPB_INLINE upb_msgval upb_msgval_ ## name(ctype v) { \
+ upb_msgval ret; \
+ ret.membername = v; \
+ return ret; \
+ }
+
+ACCESSORS(bool, b, bool)
+ACCESSORS(float, flt, float)
+ACCESSORS(double, dbl, double)
+ACCESSORS(int32, i32, int32_t)
+ACCESSORS(int64, i64, int64_t)
+ACCESSORS(uint32, u32, uint32_t)
+ACCESSORS(uint64, u64, uint64_t)
+ACCESSORS(arr, arr, const upb_array*)
+ACCESSORS(map, map, const upb_map*)
+ACCESSORS(msg, msg, const upb_msg*)
+ACCESSORS(ptr, ptr, const void*)
+ACCESSORS(str, str, upb_stringview)
+ACCESSORS(fptr, fptr, upb_func*)
+ACCESSORS(cstr, csptr, const char*)
+ACCESSORS(constptr, ptr, const void*)
+
+#undef ACCESSORS
+
+UPB_INLINE upb_msgval upb_msgval_makestr(const char *data, size_t size) {
+ return upb_msgval_str(upb_stringview_make(data, size));
+}
+
+
#endif /* UPB_H_ */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback