BVB Source Codes

CRYENGINE Show XMLCPB_AttrWriter.h Source code

Return Download CRYENGINE: download XMLCPB_AttrWriter.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. /*************************************************************************
  4. *************************************************************************/
  5.  
  6. #pragma once
  7. #ifndef XMLCPB_ATTRWRITER_H
  8.         #define XMLCPB_ATTRWRITER_H
  9.  
  10.         #include "../XMLCPB_Common.h"
  11.  
  12. // holds an attribute of a live node
  13.  
  14. namespace XMLCPB {
  15.  
  16. class CWriter;
  17. class CStringTableWriter;
  18.  
  19. class CAttrWriter
  20. {
  21. public:
  22.  
  23.         CAttrWriter(CWriter& Writer);
  24.         CAttrWriter(const CAttrWriter& other) : m_type(DT_INVALID), m_Writer(other.m_Writer) { *this = other; }
  25.         ~CAttrWriter()
  26.         {
  27.                 if (m_type == DT_RAWDATA)
  28.                         SAFE_DELETE_ARRAY(m_data.m_rawData.allocatedData);
  29.         }
  30.  
  31.         CAttrWriter& operator=(const CAttrWriter& other)
  32.         {
  33.                 if (this != &other)
  34.                 {
  35.                         if (m_type == DT_RAWDATA)
  36.                                 SAFE_DELETE_ARRAY(m_data.m_rawData.allocatedData);
  37.                         m_data = other.m_data;
  38.                         if (other.m_type == DT_RAWDATA && other.m_data.m_rawData.allocatedData)
  39.                         {
  40.                                 m_data.m_rawData.allocatedData = new uint8[other.m_data.m_rawData.size];
  41.                                 memcpy(m_data.m_rawData.allocatedData, other.m_data.m_rawData.allocatedData, other.m_data.m_rawData.size);
  42.                         }
  43.  
  44.                         m_type = other.m_type;
  45.                         m_nameID = other.m_nameID;
  46.                 }
  47.                 return *this;
  48.         }
  49.  
  50.         void        Set(const char* pAttrName, int val);
  51.         void        Set(const char* pAttrName, uint val);
  52.         void        Set(const char* pAttrName, int64 val);
  53.         void        Set(const char* pAttrName, uint64 val);
  54.         void        Set(const char* pAttrName, float val);
  55.         void        Set(const char* pAttrName, bool val);
  56.         void        Set(const char* pAttrName, const Vec2& val);
  57.         void        Set(const char* pAttrName, const Ang3& val);
  58.         void        Set(const char* pAttrName, const Vec3& val);
  59.         void        Set(const char* pAttrName, const Quat& val);
  60.         void        Set(const char* pAttrName, const char* pStr);
  61.         void        Set(const char* pAttrName, const uint8* data, uint32 len, bool needInmediateCopy);
  62.         void        Compact();
  63.         const char* GetName() const;
  64.         const char* GetStrData() const;
  65.         uint16      CalcHeader() const;
  66.  
  67.         #ifdef XMLCPB_CHECK_HARDCODED_LIMITS
  68.         void CheckHardcodedLimits(int attrIndex);
  69.         #endif
  70.  
  71. private:
  72.  
  73.         void SetName(const char* pName);
  74.         void PackFloatInSemiConstType(float val, uint32 ind, uint32& numVals);
  75.  
  76.         #ifdef XMLCPB_COLLECT_STATS
  77.         void AddDataToStatistics();
  78.         #endif
  79.  
  80.         eAttrDataType m_type;
  81.         StringID      m_nameID;
  82.         CWriter&      m_Writer;
  83.  
  84.         union
  85.         {
  86.                 StringID m_dataStringID;
  87.                 uint32   m_uint;
  88.                 uint64   m_uint64;
  89.                 struct floatType
  90.                 {
  91.                         float v0;
  92.                         float v1;
  93.                         float v2;
  94.                         float v3;
  95.                 } m_float;             // used for all float, vec2, vec3, quat, etc
  96.                 struct floatSemiConstantType
  97.                 {
  98.                         float v[4];      // the position of those has to be compatible with the ones in "floattype"
  99.                         uint8 constMask; // look into PackFloatInSemiConstType() for explanation
  100.                 } m_floatSemiConstant;
  101.                 struct rawDataType
  102.                 {
  103.                         uint32       size;
  104.                         const uint8* data;      // one of them has to be always NULL when this struct is used.
  105.                         uint8*       allocatedData;
  106.                 } m_rawData;             // used for raw byte chunk
  107.         } m_data;
  108.  
  109.         #ifdef XMLCPB_COLLECT_STATS
  110.         struct SFloat3
  111.         {
  112.                 SFloat3(float _v0, float _v1, float _v2) : v0(_v0), v1(_v1), v2(_v2) {}
  113.                 float v0, v1, v2;
  114.                 bool operator<(const SFloat3& other) const
  115.                 {
  116.                         if (v0 < other.v0) return true;
  117.                         else if (v1 < other.v1) return true;
  118.                         else return v2 < other.v2;
  119.                 }
  120.         };
  121.  
  122.         struct SFloat4
  123.         {
  124.                 SFloat4(float _v0, float _v1, float _v2, float _v3) : v0(_v0), v1(_v1), v2(_v2), v3(_v3){}
  125.                 float v0, v1, v2, v3;
  126.                 bool operator<(const SFloat4& other) const
  127.                 {
  128.                         if (v0 < other.v0) return true;
  129.                         else if (v1 < other.v1) return true;
  130.                         else if (v2 < other.v2) return true;
  131.                         else return v3 < other.v3;
  132.                 }
  133.         };
  134.  
  135. public:
  136.         struct SStatistics
  137.         {
  138.                 std::unordered_map<StringID, uint> m_stringIDMap;
  139.                 std::unordered_map<uint32, uint>   m_uint32Map;
  140.                 std::unordered_map<uint64, uint>   m_uint64Map;
  141.                 std::unordered_map<float, uint>    m_floatMap;
  142.                 std::unordered_map<SFloat3, uint>  m_float3Map;
  143.                 std::unordered_map<SFloat4, uint>  m_float4Map;
  144.                 int                                m_typeCount[DT_NUMTYPES];
  145.  
  146.                 SStatistics() { Reset(); }
  147.  
  148.                 void Reset()
  149.                 {
  150.                         for (int i = 0; i < DT_NUMTYPES; i++)
  151.                                 m_typeCount[i] = 0;
  152.                         m_stringIDMap.clear();
  153.                         m_uint32Map.clear();
  154.                         m_uint64Map.clear();
  155.                         m_floatMap.clear();
  156.                         m_float3Map.clear();
  157.                         m_float4Map.clear();
  158.                 }
  159.         };
  160.         static SStatistics m_statistics;
  161.  
  162.         typedef std::multimap<uint, string, std::greater<int>> sortingMapType;
  163.         static void WriteFileStatistics(const CStringTableWriter& stringTable);
  164. private:
  165.         static void WriteDataTypeEntriesStatistics(FILE* pFile, const sortingMapType& sortingMap, const char* pHeaderStr);
  166.  
  167.         #endif
  168. };
  169.  
  170. } // end namespace
  171. #endif
  172.  
downloadXMLCPB_AttrWriter.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top