BVB Source Codes

CRYENGINE Show ClassRegistryReplicator.cpp Source code

Return Download CRYENGINE: download ClassRegistryReplicator.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "ClassRegistryReplicator.h"
  5. #include <CryCore/CryCrc32.h>
  6.  
  7. #if !defined(_RELEASE)
  8.         #define CLASS_DUMP_ENABLED 1
  9. #else
  10.         #define CLASS_DUMP_ENABLED 0
  11. #endif
  12.  
  13. bool CClassRegistryReplicator::RegisterClassName(const string& name, uint16 id)
  14. {
  15.         if (name.empty())
  16.         {
  17.                 GameWarning("Empty class name; ignoring (tried to register at %d)",
  18.                             id);
  19.                 return false;
  20.         }
  21.  
  22.         static const uint16 NotSet = ~uint16(0);
  23.         if (id == NotSet)
  24.         {
  25.                 std::map<string, uint16>::iterator iter = m_classNameToId.find(name);
  26.                 if (iter != m_classNameToId.end())
  27.                         id = iter->second;
  28.                 else
  29.                         id = m_numClassIds++;
  30.         }
  31.  
  32.         if (m_numClassIds <= id)
  33.                 m_numClassIds = id + 1;
  34.         if (m_classIdToName.size() <= id)
  35.                 m_classIdToName.resize(id + 1);
  36.  
  37.         string overwrote;
  38.         if (!m_classIdToName[id].empty())
  39.         {
  40.                 if (m_classIdToName[id] != name)
  41.                 {
  42.                         GameWarning("Changing index %d of %s due to overwrite by %s", id, m_classIdToName[id].c_str(), name.c_str());
  43.                         overwrote = m_classIdToName[id];
  44.                         m_classNameToId.erase(name);
  45.                 }
  46.                 else
  47.                 {
  48.                         // all is ok... (things match up)
  49.                         return true;
  50.                 }
  51.         }
  52.  
  53.         if (m_classNameToId.find(name) != m_classNameToId.end())
  54.         {
  55.                 GameWarning("Aliased class name %s detected at id %d and %d",
  56.                             name.c_str(), m_classNameToId[name], id);
  57.                 return false;
  58.         }
  59.  
  60.         m_classIdToName[id] = name;
  61.         m_classNameToId[name] = id;
  62.  
  63.         if (!overwrote.empty())
  64.         {
  65.                 id = NotSet;
  66.                 for (std::vector<string>::iterator iter = m_classIdToName.begin(); iter != m_classIdToName.end(); ++iter)
  67.                         if (iter->empty())
  68.                                 id = uint16(iter - m_classIdToName.begin());
  69.                 return RegisterClassName(overwrote, id);
  70.         }
  71.  
  72.         return true;
  73. }
  74.  
  75. bool CClassRegistryReplicator::ClassIdFromName(uint16& id, const string& name) const
  76. {
  77.         std::map<string, uint16>::const_iterator iter = m_classNameToId.find(name);
  78.         if (iter == m_classNameToId.end())
  79.         {
  80.                 id = 0xdead;
  81.                 return false;
  82.         }
  83.         id = iter->second;
  84.         return true;
  85. }
  86.  
  87. bool CClassRegistryReplicator::ClassNameFromId(string& name, uint16 id) const
  88. {
  89.         if (id >= m_classIdToName.size() || m_classIdToName[id].empty())
  90.         {
  91.                 name = "<error>";
  92.                 return false;
  93.         }
  94.         name = m_classIdToName[id];
  95.         return true;
  96. }
  97.  
  98. void CClassRegistryReplicator::Reset()
  99. {
  100.         // clear out our class name buffer
  101.         m_numClassIds = 0;
  102.         m_classIdToName.resize(0);
  103.         m_classNameToId.clear();
  104. }
  105.  
  106. void CClassRegistryReplicator::GetMemoryStatistics(ICrySizer* s) const
  107. {
  108.         s->AddObject(m_classNameToId);
  109.         s->AddObject(m_classIdToName);
  110. }
  111.  
  112. uint32 CClassRegistryReplicator::GetHash()
  113. {
  114.         CCrc32 crc;
  115.         for (size_t i = 0; i < NumClassIds(); i++)
  116.         {
  117.                 string name;
  118.                 if (ClassNameFromId(name, static_cast<uint16>(i)))
  119.                 {
  120.                         crc.AddLowercase(name.c_str(), name.size());
  121.                 }
  122.         }
  123.         return crc.Get();
  124. }
  125.  
  126. void CClassRegistryReplicator::DumpClasses()
  127. {
  128. #if CLASS_DUMP_ENABLED
  129.         CryLogAlways("==========================");
  130.         CryLogAlways("===== CLASS REGISTRY =====");
  131.         CryLogAlways("==========================");
  132.         for (size_t i = 0; i < NumClassIds(); i++)
  133.         {
  134.                 string name;
  135.                 if (ClassNameFromId(name, static_cast<uint16>(i)))
  136.                 {
  137.                         CryLogAlways("%" PRISIZE_T ": %s", i, name.c_str());
  138.                 }
  139.         }
  140. #endif
  141. }
  142.  
downloadClassRegistryReplicator.cpp 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