BVB Source Codes

CRYENGINE Show FlowSerialize.cpp Source code

Return Download CRYENGINE: download FlowSerialize.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 "FlowSerialize.h"
  5.  
  6. class CFlowDataReadVisitor
  7. {
  8. public:
  9.         CFlowDataReadVisitor(const char* data) : m_data(data), m_ok(false) {}
  10.  
  11.         void Visit(int& i)
  12.         {
  13.                 m_ok = 1 == sscanf(m_data, "%i", &i);
  14.         }
  15.  
  16.         void Visit(float& i)
  17.         {
  18.                 m_ok = 1 == sscanf(m_data, "%f", &i);
  19.         }
  20.  
  21.         void Visit(EntityId& i)
  22.         {
  23.                 m_ok = 1 == sscanf(m_data, "%u", &i);
  24.         }
  25.  
  26.         void Visit(Vec3& i)
  27.         {
  28.                 m_ok = 3 == sscanf(m_data, "%f,%f,%f", &i.x, &i.y, &i.z);
  29.         }
  30.  
  31.         void Visit(string& i)
  32.         {
  33.                 i = m_data;
  34.                 m_ok = true;
  35.         }
  36.  
  37.         void Visit(bool& b)
  38.         {
  39.                 int i;
  40.                 m_ok = 1 == sscanf(m_data, "%i", &i);
  41.                 b = i != 0;
  42.         }
  43.  
  44.         void Visit(SFlowSystemVoid&)
  45.         {
  46.         }
  47.  
  48.         bool operator!() const
  49.         {
  50.                 return !m_ok;
  51.         }
  52.  
  53.         template<class T>
  54.         void operator()(T& type)
  55.         {
  56.                 Visit(type);
  57.         }
  58.  
  59.         void operator()(TFlowInputDataVariant& var)
  60.         {
  61.                 VisitVariant(var);
  62.         }
  63.  
  64. private:
  65.         template<size_t I = 0>
  66.         void VisitVariant(TFlowInputDataVariant& var)
  67.         {
  68.                 if (var.index() == I)
  69.                 {
  70.                         Visit(stl::get<I>(var));
  71.                 }
  72.                 else
  73.                 {
  74.                         VisitVariant<I + 1>(var);
  75.                 }
  76.         }
  77.  
  78.         const char* m_data;
  79.         bool        m_ok;
  80. };
  81. template<>
  82. void CFlowDataReadVisitor::VisitVariant<stl::variant_size<TFlowInputDataVariant>::value>(TFlowInputDataVariant& var)
  83. {
  84.         CRY_ASSERT_MESSAGE(false, "Invalid variant index.");
  85. }
  86.  
  87. class CFlowDataWriteVisitor
  88. {
  89. public:
  90.         CFlowDataWriteVisitor(string& out) : m_out(out) {}
  91.  
  92.         void Visit(int i)
  93.         {
  94.                 m_out.Format("%i", i);
  95.         }
  96.  
  97.         void Visit(float i)
  98.         {
  99.                 m_out.Format("%f", i);
  100.         }
  101.  
  102.         void Visit(EntityId i)
  103.         {
  104.                 m_out.Format("%u", i);
  105.         }
  106.  
  107.         void Visit(Vec3 i)
  108.         {
  109.                 m_out.Format("%f,%f,%f", i.x, i.y, i.z);
  110.         }
  111.  
  112.         void Visit(const string& i)
  113.         {
  114.                 m_out = i;
  115.         }
  116.  
  117.         void Visit(bool b)
  118.         {
  119.                 Visit(int(b));
  120.         }
  121.  
  122.         void Visit(SFlowSystemVoid)
  123.         {
  124.                 m_out.resize(0);
  125.         }
  126.  
  127.         template<class T>
  128.         void operator()(T& type)
  129.         {
  130.                 Visit(type);
  131.         }
  132.  
  133.         void operator()(const TFlowInputDataVariant& var)
  134.         {
  135.                 VisitVariant(var);
  136.         }
  137.  
  138. private:
  139.         template<size_t I = 0>
  140.         void VisitVariant(const TFlowInputDataVariant& var)
  141.         {
  142.                 if (var.index() == I)
  143.                 {
  144.                         Visit(stl::get<I>(var));
  145.                 }
  146.                 else
  147.                 {
  148.                         VisitVariant<I + 1>(var);
  149.                 }
  150.         }
  151.  
  152.         string& m_out;
  153. };
  154. template<>
  155. void CFlowDataWriteVisitor::VisitVariant<stl::variant_size<TFlowInputDataVariant>::value>(const TFlowInputDataVariant& var)
  156. {
  157.         CRY_ASSERT_MESSAGE(false, "Invalid variant index.");
  158. }
  159.  
  160. bool SetFromString(TFlowInputData& value, const char* str)
  161. {
  162.         CFlowDataReadVisitor visitor(str);
  163.         value.Visit(visitor);
  164.         return !!visitor;
  165. }
  166.  
  167. string ConvertToString(const TFlowInputData& value)
  168. {
  169.         string out;
  170.         CFlowDataWriteVisitor visitor(out);
  171.         value.Visit(visitor);
  172.         return out;
  173. }
  174.  
  175. bool SetAttr(XmlNodeRef node, const char* attr, const TFlowInputData& value)
  176. {
  177.         string out = ConvertToString(value);
  178.         node->setAttr(attr, out.c_str());
  179.         return true;
  180. }
  181.  
downloadFlowSerialize.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