gatelib  2.1
g_signal_queueDataBuffer.h
1 #pragma once
2 
3 #include "g_cont_ref.h"
4 #include "g_cont_gstr.h"
5 #include <string>
6 
7 namespace g
8 {
9 namespace signal
10 {
13 {
14 public:
15  QueueDataBufferAbstract():mOffset(0){}
16 
18 
20  virtual void write ( const void* , size_t ) = 0;
22  virtual const void* read ( void* , size_t ) = 0;
24  virtual const void* getCurrentPtr ( ) = 0;
26  void reset ( ) { mOffset = 0; }
27 
28 protected:
29  size_t mOffset;
30 };
31 
32 template < class T > QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, const T& aT )
33 {
34  out.write ( &aT , sizeof(T) );
35 
36  return out;
37 }
38 
39 template < class T > QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, T* aT )
40 {
41  out.write ( aT , sizeof(T) );
42 
43  return out;
44 }
45 
46 inline QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, void* aT )
47 {
48  out.write ( aT , sizeof(int*) );
49 
50  return out;
51 }
52 
53 inline QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, const char* aStr )
54 {
55  out.write ( aStr , (g::str::get_len ( aStr )+1) * sizeof(char));
56 
57  return out;
58 }
59 
60 inline QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, const wchar_t* aStr )
61 {
62  out.write ( aStr , (g::str::get_len ( aStr )+1) * sizeof(wchar_t));
63 
64  return out;
65 }
66 
67 template <class T> QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, const g::cont::gstr<T>& aStr )
68 {
69  out.write ( aStr , (aStr.getLength()+1) * sizeof(T));
70 
71  return out;
72 }
73 
74 template <class T> QueueDataBufferAbstract& operator << (QueueDataBufferAbstract &out, const std::basic_string<T>& aStr )
75 {
76  out.write ( aStr , (aStr.size()+1) * sizeof(T));
77 
78  return out;
79 }
80 
81 template < class T > QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, T& aT )
82 {
83  out.read ( &aT , sizeof(T) );
84 
85  return out;
86 }
87 
88 template < class T > QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, T* aT )
89 {
90  out.read ( &aT , sizeof(T) );
91 
92  return out;
93 }
94 
95 inline QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, void* aT )
96 {
97  out.read ( &aT , sizeof(int*) );
98 
99  return out;
100 }
101 
102 inline QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, char* aStr )
103 {
104  str::str_copy<char>( aStr , (const char*)out.read ( NULL , 0 ) );
105 
106  return out;
107 }
108 
109 inline QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, wchar_t* aStr )
110 {
111  str::str_copy<wchar_t>( aStr , (const wchar_t*)out.read ( NULL , 0 ) );
112 
113  return out;
114 }
115 
116 template <class T> QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, g::cont::gstr<T>& aStr )
117 {
118  const T* str_p = reinterpret_cast<const T*>(out.getCurrentPtr ());
119 
120  aStr = g::cont::gstr<T>(str_p);
121 
122  out.read(NULL,(aStr.getLength()+1)*sizeof(T));
123 
124  return out;
125 }
126 
127 template <class T> QueueDataBufferAbstract& operator >> (QueueDataBufferAbstract &out, std::basic_string<T>& aStr )
128 {
129  const T* str_p = reinterpret_cast<const T*>(out.getCurrentPtr ());
130 
131  aStr.assign(str_p);
132 
133  out.read(NULL,(aStr.size()+1)*sizeof(T));
134 
135  return out;
136 }
137 
138 }//namespace signal
139 }//namespace g
140 
Subclass for defining arbitrary data packet.
Definition: g_signal_queueDataBuffer.h:12
virtual const void * getCurrentPtr()=0
Gets current offsetted pointer.
size_t get_len(const T *aString)
Returns the string length.
Definition: g_str_lib.h:41
Definition: g.mthread.ThreadSimpleEvent.h:5
Definition: g_cont_alg.h:11
virtual void write(const void *, size_t)=0
Copies size_t buffer bytes to THIS buffer from data parameter.
Definition: g_cont_it_ref.h:10
void reset()
Reset the offset.
Definition: g_signal_queueDataBuffer.h:26
virtual const void * read(void *, size_t)=0
Copies buffer bytes to destination buffer if it is != NULL otherwise just move the offset...