parent
4a8b9be46c
commit
8f2758dda2
4 changed files with 124 additions and 0 deletions
@ -0,0 +1,49 @@ |
||||
/*
|
||||
* upb - a minimalist implementation of protocol buffers. |
||||
* |
||||
* Copyright (c) 2011 Google Inc. See LICENSE for details. |
||||
* Author: Josh Haberman <jhaberman@gmail.com> |
||||
* |
||||
* 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 |
@ -0,0 +1,23 @@ |
||||
/*
|
||||
* upb - a minimalist implementation of protocol buffers. |
||||
* |
||||
* Copyright (c) 2011 Google Inc. See LICENSE for details. |
||||
* Author: Josh Haberman <jhaberman@gmail.com> |
||||
*/ |
||||
|
||||
#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 |
@ -0,0 +1,30 @@ |
||||
/*
|
||||
* upb - a minimalist implementation of protocol buffers. |
||||
* |
||||
* Copyright (c) 2011 Google Inc. See LICENSE for details. |
||||
* Author: Josh Haberman <jhaberman@gmail.com> |
||||
*/ |
||||
|
||||
#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 |
@ -0,0 +1,22 @@ |
||||
|
||||
#include <iostream> |
||||
#include "upb/def.hpp" |
||||
#include "upb/pb/glue.hpp" |
||||
|
||||
static void TestSymbolTable() { |
||||
upb::SymbolTable *s = upb::SymbolTable::New(); |
||||
upb::Status status; |
||||
if (!upb::LoadDescriptorFileIntoSymtab(s, "tests/test.proto.pb", &status)) { |
||||
std::cerr << "Couldn't load descriptor: " << status; |
||||
exit(1); |
||||
} |
||||
upb::MessageDef *md = s->LookupMessage("A"); |
||||
assert(md); |
||||
|
||||
s->Unref(); |
||||
md->Unref(); |
||||
} |
||||
|
||||
int main() { |
||||
TestSymbolTable(); |
||||
} |
Loading…
Reference in new issue