This is Unofficial EPICS BASE Doxygen Site
serialize.h
Go to the documentation of this file.
1 /* serialize.h */
2 /*
3  * Copyright information and license terms for this software can be
4  * found in the file LICENSE that is included with the distribution
5  */
9 #ifndef SERIALIZE_H
10 #define SERIALIZE_H
11 
12 #include <epicsTypes.h>
13 
14 #include <pv/byteBuffer.h>
15 #include <pv/sharedPtr.h>
16 
17 #include <shareLib.h>
18 
19 namespace epics { namespace pvData {
20 
21  class SerializableControl;
22  class DeserializableControl;
23  class Serializable;
24  class BitSetSerializable;
25  class SerializableArray;
26  class BitSet;
27  class Field;
28 
35  public:
43  virtual void flushSerializeBuffer() =0;
49  virtual void ensureBuffer(std::size_t size) =0;
54  virtual void alignBuffer(std::size_t alignment) =0;
69  virtual bool directSerialize(
70  ByteBuffer *existingBuffer,
71  const char* toSerialize,
72  std::size_t elementCount,
73  std::size_t elementSize) = 0;
79  virtual void cachedSerialize(
80  std::tr1::shared_ptr<const Field> const & field,
81  ByteBuffer* buffer) = 0;
82  };
83 
90  public:
100  virtual void ensureData(std::size_t size) =0;
108  virtual void alignData(std::size_t alignment) =0;
123  virtual bool directDeserialize(
124  ByteBuffer *existingBuffer,
125  char* deserializeTo,
126  std::size_t elementCount,
127  std::size_t elementSize) = 0;
132  virtual std::tr1::shared_ptr<const Field> cachedDeserialize(
133  ByteBuffer* buffer) = 0;
134  };
135 
141  public:
145  virtual ~Serializable(){}
151  virtual void serialize(ByteBuffer *buffer,
152  SerializableControl *flusher) const = 0;
158  virtual void deserialize(ByteBuffer *buffer,
159  DeserializableControl *flusher) = 0;
160  };
161 
171  int byteOrder,
172  std::vector<epicsUInt8>& out);
173 
181  ByteBuffer& in);
182 
191  int byteOrder,
192  const std::vector<epicsUInt8>& in)
193  {
194  ByteBuffer B((char*)&in[0], in.size(), byteOrder); // we promise not the modify 'in'
195  deserializeFromBuffer(S, B);
196  }
197 
203  public:
214  virtual void serialize(ByteBuffer *buffer,
215  SerializableControl *flusher,BitSet *bitSet) const = 0;
222  virtual void deserialize(ByteBuffer *buffer,
223  DeserializableControl *flusher,BitSet *bitSet) = 0;
224  };
225 
226 
232  public:
236  virtual ~SerializableArray(){}
245  virtual void serialize(
246  ByteBuffer *buffer,
247  SerializableControl *flusher,
248  std::size_t offset,
249  std::size_t count) const = 0;
250  };
251 
252 }}
253 #endif /* SERIALIZE_H */
void deserializeFromVector(Serializable *S, int byteOrder, const std::vector< epicsUInt8 > &in)
deserializeFromBuffer Deserialize into S from provided vector
Definition: serialize.h:190
virtual void serialize(ByteBuffer *buffer, SerializableControl *flusher) const =0
size_t elementSize(ScalarType id)
gives sizeof(T) where T depends on the scalar type id.
Definition: TypeFunc.cpp:82
Base class for serialization.
Definition: serialize.h:140
void epicsShareFunc deserializeFromBuffer(Serializable *S, ByteBuffer &in)
deserializeFromBuffer Deserialize into S from provided vector
#define epicsShareFunc
Definition: shareLib.h:209
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
A vector of bits.
Definition: bitSet.h:56
Mark external symbols and entry points for shared libraries.
Callback class for deserialization.
Definition: serialize.h:89
Class for serializing bitSets.
Definition: serialize.h:202
Class for serializing arrays.
Definition: serialize.h:231
#define epicsShareClass
Definition: shareLib.h:206
This class implements a Bytebuffer that is like the java.nio.ByteBuffer.
Definition: byteBuffer.h:233
Callback class for serialization.
Definition: serialize.h:34
void epicsShareFunc serializeToVector(const Serializable *S, int byteOrder, std::vector< epicsUInt8 > &out)
Push serialize and append to the provided byte vector. No caching is done. Only complete serializatio...