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#include "flatbuffers/idl.h"
17
18#define SerializeFlatbufferText(TYPE, ITEM) Flat::FlatbufferInterface::SerializeHelper<TYPE>(ITEM, TYPE##Identifier())
19#define SerializeFlatbufferTextDirect(TYPE, BUFFER) Flat::FlatbufferInterface::BufferToText(BUFFER, TYPE##Identifier())
20#define CompileFlatbuffer(TYPE, SOURCE, TARGET) Flat::FlatbufferInterface::Compile(SOURCE, TARGET, TYPE##Identifier())
21
22namespace Flat
23{
24
26{
27public:
28
30 static void Init();
32 static bool LoadSchema(IO::URI const& file);
34 static bool CompileSchema(IO::URI const& file, IO::URI const& outFile);
36 static Util::Blob ParseJson(IO::URI const& file);
38 static Util::Blob ParseJson(IO::URI const& file, const Util::String& schema);
40 static bool HasSchema(Util::StringAtom identifier);
41
43 template<typename BaseT, typename ItemT> static Util::String SerializeHelper(ItemT const& item, const char* ident);
44
46 template<typename BaseT, typename ItemT> static Util::Blob SerializeFlatbuffer(ItemT const& item);
47
49 template<typename BaseT, typename ItemT> static void DeserializeFlatbufferFile(ItemT& item, IO::URI const& file);
51 template<typename BaseT, typename ItemT> static void DeserializeFlatbuffer(ItemT& item, const uint8_t* buf);
52
54 template<typename BaseT, typename ItemT> static bool DeserializeJsonFlatbuffer(ItemT& item, const IO::URI& file, const Util::String& rootName);
55
57 static Util::String BufferToText(const uint8_t* buffer, Util::StringAtom identifier);
58
60 static bool Compile(IO::URI const& source, IO::URI const& targetFolder, const char* ident);
61
62private:
63 static flatbuffers::Parser* CreateParserForJson(IO::URI const& file);
64};
65
66
67//------------------------------------------------------------------------------
70template<typename BaseT, typename ItemT> Util::String
71FlatbufferInterface::SerializeHelper(ItemT const& item, const char* ident)
72{
73 Util::StringAtom sIdent(ident);
75 flatbuffers::FlatBufferBuilder builder(65536);
76 builder.Finish(BaseT::Pack(builder, &item));
77 return FlatbufferInterface::BufferToText(builder.GetBufferPointer(), sIdent);
78}
79
80//------------------------------------------------------------------------------
83template <typename BaseT, typename ItemT> Util::Blob
85{
86 flatbuffers::FlatBufferBuilder builder(65536);
87 builder.Finish(BaseT::Pack(builder, &item));
88 return Util::Blob(builder.GetBufferPointer(), builder.GetSize());
89}
90
91//------------------------------------------------------------------------------
94template<typename BaseT, typename ItemT>
95void
96FlatbufferInterface::DeserializeFlatbuffer(ItemT& item, const uint8_t* buf)
97{
98 const BaseT* bItem = flatbuffers::GetRoot<BaseT>(buf);
99 bItem->UnPackTo(&item);
100}
101
102//------------------------------------------------------------------------------
105template<typename BaseT, typename ItemT>
106void
108{
109 Util::String contents;
110 if (IO::IoServer::Instance()->ReadFile(file, contents))
111 {
112 const BaseT* bItem = flatbuffers::GetRoot<BaseT>(contents.AsCharPtr());
113 bItem->UnPackTo(&item);
114 }
115}
116
117//------------------------------------------------------------------------------
120template<typename BaseT, typename ItemT>
121bool
123{
124 Util::Blob flatBuffer = FlatbufferInterface::ParseJson(file, rootName);
125 if (flatBuffer.IsValid())
126 {
127 const BaseT* bItem = flatbuffers::GetRoot<BaseT>(flatBuffer.GetPtr());
128 bItem->UnPackTo(&item);
129 return true;
130 }
131 return false;
132}
133}
Definition flatbufferinterface.h:26
static void DeserializeFlatbufferFile(ItemT &item, IO::URI const &file)
Definition flatbufferinterface.h:107
static bool LoadSchema(IO::URI const &file)
Definition flatbufferinterface.cc:136
static Util::String SerializeHelper(ItemT const &item, const char *ident)
Helper function, use SerializeFlatbuffer macro instead.
Definition flatbufferinterface.h:71
static void Init()
Initialize datastructures and load all schema files in export.
Definition flatbufferinterface.cc:126
static Util::Blob SerializeFlatbuffer(ItemT const &item)
Serialize to binary blob.
Definition flatbufferinterface.h:84
static bool Compile(IO::URI const &source, IO::URI const &targetFolder, const char *ident)
compile flatbuffer json to binary
Definition flatbufferinterface.cc:267
static Util::Blob ParseJson(IO::URI const &file)
Definition flatbufferinterface.cc:157
static bool DeserializeJsonFlatbuffer(ItemT &item, const IO::URI &file, const Util::String &rootName)
Definition flatbufferinterface.h:122
static bool HasSchema(Util::StringAtom identifier)
Definition flatbufferinterface.cc:249
static void DeserializeFlatbuffer(ItemT &item, const uint8_t *buf)
Definition flatbufferinterface.h:96
static flatbuffers::Parser * CreateParserForJson(IO::URI const &file)
Definition flatbufferinterface.cc:145
static Util::String BufferToText(const uint8_t *buffer, Util::StringAtom identifier)
Definition flatbufferinterface.cc:257
static bool CompileSchema(IO::URI const &file, IO::URI const &outFile)
Definition flatbufferinterface.cc:204
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:23
Nebula's universal string class.
Definition String.cs:8
const char * AsCharPtr() const
return contents as character pointer
Definition string.h:542