From 8f2758dda2ba12b78ae8f8c7170decc5e88dd28c Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sat, 3 Sep 2011 11:14:18 -0700 Subject: Work on C++ wrappers, added C++ test. --- bindings/cpp/upb/def.hpp | 49 ++++++++++++++++++++++++++++++++++++++++++++ bindings/cpp/upb/pb/glue.hpp | 23 +++++++++++++++++++++ bindings/cpp/upb/upb.hpp | 30 +++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 bindings/cpp/upb/def.hpp create mode 100644 bindings/cpp/upb/pb/glue.hpp create mode 100644 bindings/cpp/upb/upb.hpp (limited to 'bindings') diff --git a/bindings/cpp/upb/def.hpp b/bindings/cpp/upb/def.hpp new file mode 100644 index 0000000..6500243 --- /dev/null +++ b/bindings/cpp/upb/def.hpp @@ -0,0 +1,49 @@ +/* + * upb - a minimalist implementation of protocol buffers. + * + * Copyright (c) 2011 Google Inc. See LICENSE for details. + * Author: Josh Haberman + * + * The set of upb::*Def classes and upb::SymbolTable allow for defining and + * manipulating schema information (as defined in .proto files). + */ + +#ifndef UPB_DEF_HPP +#define UPB_DEF_HPP + +#include "upb/def.h" + +namespace upb { + +class MessageDef : public upb_msgdef { + public: + static MessageDef* Cast(upb_msgdef *md) { return (MessageDef*)md; } + + void Unref() { return upb_msgdef_unref(this); } + + private: + MessageDef(); + ~MessageDef(); +}; + +class SymbolTable : public upb_symtab { + public: + static SymbolTable* Cast(upb_symtab *s) { return (SymbolTable*)s; } + static SymbolTable* New() { return Cast(upb_symtab_new()); } + + void Unref() { return upb_symtab_unref(this); } + + // If the given name refers to a message in this symbol table, returns a new + // ref to that MessageDef object, otherwise returns NULL. + MessageDef* LookupMessage(const char *name) { + return MessageDef::Cast(upb_symtab_lookupmsg(this, name)); + } + + private: + SymbolTable(); + ~SymbolTable(); +}; + +} // namespace upb + +#endif diff --git a/bindings/cpp/upb/pb/glue.hpp b/bindings/cpp/upb/pb/glue.hpp new file mode 100644 index 0000000..be072a7 --- /dev/null +++ b/bindings/cpp/upb/pb/glue.hpp @@ -0,0 +1,23 @@ +/* + * upb - a minimalist implementation of protocol buffers. + * + * Copyright (c) 2011 Google Inc. See LICENSE for details. + * Author: Josh Haberman + */ + +#ifndef UPB_PB_GLUE_HPP +#define UPB_PB_GLUE_HPP + +#include "upb/upb.hpp" +#include "upb/pb/glue.h" + +namespace upb { + +bool LoadDescriptorFileIntoSymtab(SymbolTable* s, const char *fname, + Status* status) { + return upb_load_descriptor_file_into_symtab(s, fname, status); +} + +} // namespace upb + +#endif diff --git a/bindings/cpp/upb/upb.hpp b/bindings/cpp/upb/upb.hpp new file mode 100644 index 0000000..460fb43 --- /dev/null +++ b/bindings/cpp/upb/upb.hpp @@ -0,0 +1,30 @@ +/* + * upb - a minimalist implementation of protocol buffers. + * + * Copyright (c) 2011 Google Inc. See LICENSE for details. + * Author: Josh Haberman + */ + +#ifndef UPB_HPP +#define UPB_HPP + +#include "upb/upb.h" + +namespace upb { + +class Status : public upb_status { + public: + Status() { upb_status_init(this); } + ~Status() { upb_status_uninit(this); } + + const char *GetString() const { return upb_status_getstr(this); } +}; + +INLINE std::ostream& operator<<(std::ostream& out, const Status& status) { + out << status.GetString(); + return out; +} + +} // namespace upb + +#endif -- cgit v1.2.3