NAP
binarywriter.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 #include "writer.h"
8 #include <utility/dllexport.h>
9 #include <vector>
10 
11 namespace nap
12 {
13  namespace rtti
14  {
15  class NAPAPI BinaryWriter : public Writer
16  {
17  public:
21  const std::vector<uint8_t>& getBuffer() const
22  {
23  return mBuffer;
24  }
25 
29  bool supportsEmbeddedPointers() const override { return false; }
30 
34  bool start(const ObjectList& rootObjects) override;
35 
39  bool finish() override { return true; }
40 
44  bool startRootObject(const rtti::TypeInfo& type) override;
45 
49  bool finishRootObject() override { return true; }
50 
54  bool startCompound(const rtti::TypeInfo& type) override { return true; }
55 
59  bool finishCompound() override { return true; }
60 
64  bool startArray(int length) override;
65 
69  bool finishArray() override { return true; }
70 
74  bool writeProperty(const std::string& propertyName) override { return true; }
75 
79  bool writePointer(const std::string& pointeeID) override;
80 
84  bool writePrimitive(const rtti::TypeInfo& type, const rtti::Variant& value) override;
85 
86  private:
92  void ensureHasRoom(uint32_t numBytes);
93 
100  void write(const void* data, uint32_t length);
101 
105  template <class T>
106  void write(const T& data)
107  {
108  write(&data, sizeof(T));
109  }
110 
116  void writeString(const std::string& string);
117 
124  void writeString(const char* string, size_t length);
125 
131  size_t getPosition() const;
132 
133 
137  void seek(size_t position);
138 
139  private:
140  std::vector<uint8_t> mBuffer;
141  uint8_t* mWritePointer = nullptr;
142  };
143  }
144 }
nap::rtti::BinaryWriter::getBuffer
const std::vector< uint8_t > & getBuffer() const
Definition: binarywriter.h:21
nap::rtti::BinaryWriter::finishArray
bool finishArray() override
Definition: binarywriter.h:69
nap::rtti::Writer
Definition: writer.h:32
nap::rtti::BinaryWriter::supportsEmbeddedPointers
bool supportsEmbeddedPointers() const override
Definition: binarywriter.h:29
nap::rtti::BinaryWriter::finish
bool finish() override
Definition: binarywriter.h:39
nap::rtti::BinaryWriter::finishRootObject
bool finishRootObject() override
Definition: binarywriter.h:49
nap::rtti::BinaryWriter::writeProperty
bool writeProperty(const std::string &propertyName) override
Definition: binarywriter.h:74
nap::rtti::BinaryWriter
Definition: binarywriter.h:15
nap::rtti::ObjectList
std::vector< Object * > ObjectList
Definition: rttiutilities.h:34
nap
Definition: templateapp.h:17
nap::rtti::BinaryWriter::finishCompound
bool finishCompound() override
Definition: binarywriter.h:59
nap::rtti::BinaryWriter::startCompound
bool startCompound(const rtti::TypeInfo &type) override
Definition: binarywriter.h:54
nap::rtti::Variant
rttr::variant Variant
Definition: typeinfo.h:143
nap::rtti::TypeInfo
rttr::type TypeInfo
Definition: typeinfo.h:140