17#ifndef AGXDATA_SERIALIZEDDATA_H
18#define AGXDATA_SERIALIZEDDATA_H
117 void addChildren(Component* eParent,
const agx::Component* component);
118 void add(Component* eParent,
const agxData::Frame::EntityStorage* storage);
121 void add(Component* eParent,
const agxData::Frame::PartialBuffer* buffer);
124 void addArrayBuffer(Component* eParent,
const agxData::Buffer* buffer);
127 template <
typename StringT>
128 void addStringBuffer(Component* eParent,
const agxData::Buffer* buffer);
130 void writeXmlEvents(agx::TiXmlElement* eParent)
const;
133 static size_t createComponent(
agx::Component* parent,
const Component* serializedComponent);
134 static size_t createChildren(
agx::Component* parent,
const Component* serializedComponent);
138 static size_t createBuffer(
agx::Component* parent,
const CustomBuffer* serializedBuffer);
139 static size_t createBuffer(
agx::Component* parent,
const PartialBuffer* serializedBuffer);
142 static agxData::Buffer* createBuffer(
const CustomBuffer* serializedBuffer);
143 static agxData::Buffer* createArrayBuffer(
const CustomBuffer* serializedBuffer);
144 static agxData::Buffer* createPtrBuffer(
const CustomBuffer* serializedBuffer);
146 template <
typename T>
147 static agxData::Buffer* createNameBuffer(
const CustomBuffer* serializedBuffer);
156 const Frame* m_frame;
160 size_t m_currentOffset;
161 size_t m_totNumBytes;
361 Frame*
extract(
bool clearNameTableOnKeyFrame);
457 friend class Component;
476 template <
typename T>
479 template <
typename T>
485 template<
typename ComponentT>
544 size_t m_numElements;
563 size_t m_numElements;
584 size_t m_numElements;
606 size_t m_numElements;
623 AGX_FORCE_INLINE SerializedFrame::Node::Type SerializedFrame::Node::getType()
const {
return m_type; }
627 AGX_FORCE_INLINE void SerializedFrame::Node::setParent(Component* parent) { m_parent = parent; }
631 AGX_FORCE_INLINE const Format* SerializedFrame::DataNode::getFormat()
const {
return m_format; }
632 AGX_FORCE_INLINE size_t SerializedFrame::DataNode::getNumBytes()
const {
return m_numBytes; }
633 AGX_FORCE_INLINE size_t SerializedFrame::DataNode::getOffset()
const {
return m_offset; }
635 AGX_FORCE_INLINE BinaryData* SerializedFrame::DataNode::getData() {
return m_data; }
636 AGX_FORCE_INLINE const BinaryData* SerializedFrame::DataNode::getData()
const {
return m_data; }
643 template <
typename T>
646 for (
size_t i = 0; i < m_children.size(); ++i)
648 if (m_children[i]->getName() == name && m_children[i]->is<T>())
649 return m_children[i]->as<T>();
655 template <
typename T>
656 AGX_FORCE_INLINE const T* SerializedFrame::Component::getChild(
const char* name)
const
663 AGX_FORCE_INLINE size_t SerializedFrame::Buffer::getNumElements()
const {
return m_numElements; }
668 AGX_FORCE_INLINE const Format* SerializedFrame::CustomBuffer::getFormat()
const {
return m_format; }
669 AGX_FORCE_INLINE size_t SerializedFrame::CustomBuffer::getNumElements()
const {
return m_numElements; }
674 AGX_FORCE_INLINE const Format* SerializedFrame::PartialBuffer::getFormat()
const {
return m_format; }
675 AGX_FORCE_INLINE size_t SerializedFrame::PartialBuffer::getNumElements()
const {
return m_numElements; }
676 AGX_FORCE_INLINE size_t SerializedFrame::PartialBuffer::fullSize()
const {
return m_fullSize; }
681 AGX_FORCE_INLINE EntityModel* SerializedFrame::EntityStorage::getModel() {
return m_model; }
682 AGX_FORCE_INLINE const EntityModel* SerializedFrame::EntityStorage::getModel()
const {
return m_model; }
683 AGX_FORCE_INLINE size_t SerializedFrame::EntityStorage::getNumElements()
const {
return m_numElements; }
#define AGX_DECLARE_POINTER_TYPES(type)
#define AGX_DECLARE_VECTOR_TYPES(type)
Type-specific Array used for fast access into the data held by a Buffer.
Abstract representation of a data buffer.
Utility class for parsing/writing a byte stream.
An abstract description of a data entity stored using SOA (structure of arrays) pattern in a EntitySt...
Data storage for a collection of entity instances of a specified EntityModel.
The FrameReader reads frames from an external source.
Node(const agx::Name &name, agx::Index id)
agx::TiXmlElement * writeXmlHeader() const
BinaryData * writeBinaryHeader() const
static Frame * extractFrame(BinaryData *headerSegment, BinaryData *dataSegment)
agx::HashVector< agx::Name, agx::UInt32 > ExportNameTable
BinaryData * writeBinaryHeader(ExportNameTable &nameTable) const
static Frame * extractFrame(BinaryData *headerSegment, BinaryData *dataSegment, ImportNameTable &nameTable, bool clearNameTableOnKeyFrame=true, FrameReader *frameReader=nullptr)
agx::Vector< NodeRef > NodeRefVector
const NodeRefVector & getChildren() const
void add(agxData::Array< agx::Index > &instances)
void addChild(Node *child)
const agx::Name & getTypeName() const
virtual void writeDataSegment(std::ostream &binaryFile, agx::UInt64 baseOffset) override
const agx::UInt64Vector & getIdVector() const
Buffer(const agx::Name &name, agx::Index id, BinaryData *data, const Format *format, size_t numElements, size_t byteOffset)
PartialBuffer(agxData::Frame::PartialBuffer *buffer)
DataNode(const agx::Name &name, agx::Index id, BinaryData *data, const Format *format, size_t numBytes, size_t offset)
EntityStorage(const agxData::Frame::EntityStorage *storage)
StorageBatchEvent(Type type, agxData::EntityStorage *storage, size_t reserve=0)
ByteStream writeBinaryHeader(ByteStream stream, ExportNameTable &nameTable, ComponentT &eComponent)
virtual agx::TiXmlElement * writeXmlHeader(agx::TiXmlElement *eParent) override
void add(agxData::Array< agxData::EntityPtr > &instances)
static void updateNameTable(BinaryData *headerSegment, ImportNameTable &nameTable)
size_t getNumElements() const
SerializedFrame(const agxData::Frame *frame)
void writeBinaryHeader(BinaryHeader::Node &eNode, ExportNameTable &nameTable)
const EntityModel * getModel() const
size_t getTotNumBytes() const
virtual agx::TiXmlElement * writeXmlHeader(agx::TiXmlElement *eParent)=0
const agx::Name & getName() const
size_t getNumBytes() const
void add(agxData::EntityRange &instances)
Component(const agx::Name &name, agx::Index id=agx::InvalidIndex)
virtual size_t getBinaryHeaderNumBytes() const =0
virtual void writeDataSegment(std::ostream &binaryFile, agx::UInt64 baseOffset)=0
virtual ~SerializedFrame()
T * getChild(const char *name)
agx::Vector< BinarySegment > BinarySegmentVector
agx::String getPath() const
const BinaryData * getData() const
SerializedFrame(SerializedFrame::Component *root)
virtual ByteStream writeBinaryHeader(ByteStream stream, ExportNameTable &nameTable) override
void writeBinaryHeader(BinaryHeader::DataNode &eNode, ExportNameTable &nameTable)
static Frame * extractFrame(agx::TiXmlElement *eFrame, BinaryData *dataSegment)
const Format * getFormat() const
EntityStorage(const agx::Name &name, agx::Index id, EntityModel *model, size_t numElements, size_t capacity)
void writeDataSegment(std::ostream &binaryFile)
agxData::EntityStorage * getStorage()
const T * getChild(const char *name) const
static Frame * createFrame(const Component *root, agx::UInt index, agx::Real timeStamp, agx::Real timeStep)
PartialBuffer(const agx::Name &name, agx::Index id, const Format *format, size_t numElements, size_t fullSize)
void writeChildren(agx::TiXmlElement *eParent)
void setParent(Component *parent)
const BinarySegmentVector & getBinarySegments() const
CustomBuffer(const agx::Name &name, agx::Index id, const Format *format, size_t numElements)
void setId(agx::Index id)
Value(const agx::Name &name, agx::Index id, BinaryData *data, const Format *format, size_t offset)
virtual size_t getBinaryHeaderNumBytes() const override
agx::HashVector< agx::UInt32, agx::Name > ImportNameTable
virtual ByteStream writeBinaryHeader(ByteStream stream, ExportNameTable &nameTable)
Abstract representation of a value.
A component is an object containing other objects, enabling hierarchical structuring.
This class is a combined container which has the find complexity of a HashTable, deterministic iterat...
Representation of a name string.
Representation of a path, a list of name components.
Base class providing referencing counted objects.
Vector containing 'raw' data.
#define DOXYGEN_END_INTERNAL_BLOCK()
#define DOXYGEN_START_INTERNAL_BLOCK()
Contains classes for low level data storage for AGX.
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
AGXCORE_EXPORT const InvalidIndexStruct InvalidIndex
BinarySegment(BinaryData *_data, size_t _offset)