Nebula
Loading...
Searching...
No Matches
flatbufferinterface.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
9
10#include "io/uri.h"
11#include "util/stringatom.h"
12#include "flatbuffers/flatbuffers.h"
14#include "util/blob.h"
15#include "io/ioserver.h"
16
17// Flatbuffers defines ERROR on Windows, undefine it to avoid conflicts
18#ifdef ERROR
19#undef ERROR
20#endif
21#include "flatbuffers/idl.h"
22
23#define SerializeFlatbufferText(TYPE, ITEM) Flat::FlatbufferInterface::SerializeHelper<TYPE>(ITEM, TYPE##Identifier())
24#define SerializeFlatbufferTextDirect(TYPE, BUFFER) Flat::FlatbufferInterface::BufferToText(BUFFER, TYPE##Identifier())
25#define CompileFlatbuffer(TYPE, SOURCE, TARGET) Flat::FlatbufferInterface::Compile(SOURCE, TARGET, TYPE##Identifier())
26
27namespace Flat
28{
29
31{
32public:
33
35 static void Init();
37 static bool LoadSchema(IO::URI const& file);
39 static bool CompileSchema(IO::URI const& file, IO::URI const& outFile);
41 static Util::Blob ParseJson(IO::URI const& file);
43 static Util::Blob ParseJson(IO::URI const& file, const Util::String& schema);
45 static bool HasSchema(Util::StringAtom identifier);
46
48 template<typename BaseT, typename ItemT> static Util::String SerializeHelper(ItemT const& item, const char* ident);
49
51 template<typename BaseT, typename ItemT> static Util::Blob SerializeFlatbuffer(ItemT const& item);
52
54 template<typename BaseT, typename ItemT> static void DeserializeFlatbufferFile(ItemT& item, IO::URI const& file);
56 template<typename BaseT, typename ItemT> static void DeserializeFlatbuffer(ItemT& item, const uint8_t* buf);
57
59 template<typename BaseT, typename ItemT> static bool DeserializeJsonFlatbuffer(ItemT& item, const IO::URI& file, const Util::String& rootName);
60
62 static Util::String BufferToText(const uint8_t* buffer, Util::StringAtom identifier);
63
65 static bool Compile(IO::URI const& source, IO::URI const& targetFolder, const char* ident);
66
67private:
68 static flatbuffers::Parser* CreateParserForJson(IO::URI const& file);
69};
70
71
72//------------------------------------------------------------------------------
75template<typename BaseT, typename ItemT> Util::String
76FlatbufferInterface::SerializeHelper(ItemT const& item, const char* ident)
77{
78 Util::StringAtom sIdent(ident);
80 flatbuffers::FlatBufferBuilder builder(65536);
81 builder.Finish(BaseT::Pack(builder, &item));
82 return FlatbufferInterface::BufferToText(builder.GetBufferPointer(), sIdent);
83}
84
85//------------------------------------------------------------------------------
88template <typename BaseT, typename ItemT> Util::Blob
90{
91 flatbuffers::FlatBufferBuilder builder(65536);
92 builder.Finish(BaseT::Pack(builder, &item));
93 return Util::Blob(builder.GetBufferPointer(), builder.GetSize());
94}
95
96//------------------------------------------------------------------------------
99template<typename BaseT, typename ItemT>
100void
101FlatbufferInterface::DeserializeFlatbuffer(ItemT& item, const uint8_t* buf)
102{
103 const BaseT* bItem = flatbuffers::GetRoot<BaseT>(buf);
104 bItem->UnPackTo(&item);
105}
106
107//------------------------------------------------------------------------------
110template<typename BaseT, typename ItemT>
111void
113{
114 Util::String contents;
115 if (IO::IoServer::Instance()->ReadFile(file, contents))
116 {
117 const BaseT* bItem = flatbuffers::GetRoot<BaseT>(contents.AsCharPtr());
118 bItem->UnPackTo(&item);
119 }
120}
121
122//------------------------------------------------------------------------------
125template<typename BaseT, typename ItemT>
126bool
128{
129 Util::Blob flatBuffer = FlatbufferInterface::ParseJson(file, rootName);
130 if (flatBuffer.IsValid())
131 {
132 const BaseT* bItem = flatbuffers::GetRoot<BaseT>(flatBuffer.GetPtr());
133 bItem->UnPackTo(&item);
134 return true;
135 }
136 return false;
137}
138}
Definition flatbufferinterface.h:31
static void DeserializeFlatbufferFile(ItemT &item, IO::URI const &file)
Definition flatbufferinterface.h:112
static bool LoadSchema(IO::URI const &file)
Definition flatbufferinterface.cc:138
static Util::String SerializeHelper(ItemT const &item, const char *ident)
Helper function, use SerializeFlatbuffer macro instead.
Definition flatbufferinterface.h:76
static void Init()
Initialize datastructures and load all schema files in export.
Definition flatbufferinterface.cc:128
static Util::Blob SerializeFlatbuffer(ItemT const &item)
Serialize to binary blob.
Definition flatbufferinterface.h:89
static bool Compile(IO::URI const &source, IO::URI const &targetFolder, const char *ident)
compile flatbuffer json to binary
Definition flatbufferinterface.cc:269
static Util::Blob ParseJson(IO::URI const &file)
Definition flatbufferinterface.cc:159
static bool DeserializeJsonFlatbuffer(ItemT &item, const IO::URI &file, const Util::String &rootName)
Definition flatbufferinterface.h:127
static bool HasSchema(Util::StringAtom identifier)
Definition flatbufferinterface.cc:251
static void DeserializeFlatbuffer(ItemT &item, const uint8_t *buf)
Definition flatbufferinterface.h:101
static flatbuffers::Parser * CreateParserForJson(IO::URI const &file)
Definition flatbufferinterface.cc:147
static Util::String BufferToText(const uint8_t *buffer, Util::StringAtom identifier)
Definition flatbufferinterface.cc:259
static bool CompileSchema(IO::URI const &file, IO::URI const &outFile)
Definition flatbufferinterface.cc:206
An URI object can split a Uniform Resource Identifier string into its components or build a string fr...
Definition uri.h:67
The Util::Blob class encapsulates a chunk of raw memory into a C++ object which can be copied,...
Definition blob.h:22
void * GetPtr() const
get blob ptr
Definition blob.h:464
bool IsValid() const
return true if the blob contains data
Definition blob.h:237
A StringAtom.
Definition stringatom.h:22
#define n_assert(exp)
Definition debug.h:50
Flatbuffer to Nebula type conversion functions.
Definition flatbufferinterface.h:28
Nebula's universal string class.
Definition String.cs:8
const char * AsCharPtr() const
return contents as character pointer
Definition string.h:544