(C++)  1.1.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
DecisionTreeBinarySerializer.hh
1 #ifndef GRAIL_DECISION_TREE_BINARY_SERIALIZER_H
2 #define GRAIL_DECISION_TREE_BINARY_SERIALIZER_H
3 
4 #include "IDecisionTreeSerializer.hh"
5 #include "IDecisionSerializers.hh"
6 #include <iostream>
7 namespace grail
8 {
9  namespace simulation
10  {
15  template <class TDecisionType>
17  {
18  public:
19 
25  DecisionTreeBinarySerializer(std::unique_ptr<IDecisionBinarySerializer<TDecisionType>> actionSerializer, std::ostream* outStream) :
26  outStream { outStream},
27  inStream { nullptr},
28  actionSerializer { std::move(actionSerializer)}
29  {
30 
31  }
32 
33 
39  DecisionTreeBinarySerializer(std::unique_ptr<IDecisionBinarySerializer<TDecisionType>> actionSerializer, std::istream* inStream) :
40  outStream{ nullptr },
41  inStream{ inStream },
42  actionSerializer{ std::move(actionSerializer) }
43  {
44 
45  }
46 
47  template<class T>
48  void Write(T val)
49  {
50  outStream->write(reinterpret_cast<char*>(&val), sizeof(val));
51  }
52 
53  template<class T>
54  T Read()
55  {
56  char m[sizeof(size_t)];
57  inStream->read(m, sizeof(T));
58  T* val = reinterpret_cast<T*>(m);
59  return *val;
60  }
61 
63  virtual void SerializeNodeType(DecisionNodeType nodeType) override
64  {
65  Write(static_cast<int>(nodeType));
66  }
67 
69  virtual DecisionNodeType DeserializeNodeType() override
70  {
71  int i = Read<int>();
72  if (i == 0)
73  return DecisionNodeType::NOMINAL_INNER;
74  else if (i == 1)
75  return DecisionNodeType::CONTINUOUS_INNER;
76  else
77  return DecisionNodeType::LEAF;
78  }
79 
81  virtual void SerializeColumnIndex(int columnIndex) override
82  {
83  Write(columnIndex);
84  }
85 
87  virtual int DeserializeColumnIndex() override
88  {
89  return Read<int>();
90  }
91 
93  virtual void SerializeValue(float value) override
94  {
95  Write(value);
96  }
97 
99  virtual float DeserializeValue() override
100  {
101  return Read<float>();
102 
103  }
104 
106  virtual void SerializeChildrenCount(int count) override
107  {
108  Write(count);
109 
110  }
111 
113  virtual int DeserializeChildrenCount() override
114  {
115  return Read<int>();
116 
117  }
118 
120  virtual void SerializeDecision(const TDecisionType& decision) override
121  {
122  actionSerializer->Serialize(decision, *outStream);
123  }
124 
126  virtual std::unique_ptr<TDecisionType> DeserializeDecision() override
127  {
128  return actionSerializer->Deserialize(*inStream);
129  }
130 
131  private:
132  std::ostream* outStream;
133  std::istream* inStream;
134  std::unique_ptr<IDecisionBinarySerializer<TDecisionType>> actionSerializer;
135 
136  };
137  }
138 }
139 #endif //GRAIL_DECISION_TREE_BINARY_SERIALIZER_H
Used to serialize decision tree in a binary mode. Pass object of this type to the DecisionTree....
Definition: DecisionTreeBinarySerializer.hh:17
virtual int DeserializeColumnIndex() override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:87
virtual void SerializeNodeType(DecisionNodeType nodeType) override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:63
virtual void SerializeDecision(const TDecisionType &decision) override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:120
virtual std::unique_ptr< TDecisionType > DeserializeDecision() override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:126
virtual void SerializeColumnIndex(int columnIndex) override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:81
virtual DecisionNodeType DeserializeNodeType() override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:69
virtual float DeserializeValue() override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:99
virtual void SerializeChildrenCount(int count) override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:106
virtual int DeserializeChildrenCount() override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:113
virtual void SerializeValue(float value) override
Inherited from IDecisionTreeSerializer.
Definition: DecisionTreeBinarySerializer.hh:93
DecisionTreeBinarySerializer(std::unique_ptr< IDecisionBinarySerializer< TDecisionType >> actionSerializer, std::istream *inStream)
Constructs a new DecisionTreeBinarySerializer object. This constructor is used for deserialization on...
Definition: DecisionTreeBinarySerializer.hh:39
DecisionTreeBinarySerializer(std::unique_ptr< IDecisionBinarySerializer< TDecisionType >> actionSerializer, std::ostream *outStream)
Constructs a new DecisionTreeBinarySerializer object. This constructor is used for serialization only...
Definition: DecisionTreeBinarySerializer.hh:25
Definition: IDecisionSerializers.hh:32
A base class for an object that is passed to Serialize() and Deserialize() methods of DecisionTree....
Definition: IDecisionTreeSerializer.hh:21