gatelib  2.1
g_signal_queue.h
1 #pragma once
2 
3 #include "g_cont_ref.h"
4 #include "g_cont_ref_lst.h"
5 #include "g_cont_vect.h"
6 #include "g_str_lib.h"
7 #include "g_signal_queueDataBuffer.h"
8 #include <string>
9 /****************************************************************************************
10  Defines an abstract interface to the data queue for serializable signals.
11 ****************************************************************************************/
12 namespace g
13 {
14 namespace signal
15 {
18 {
20 
21  virtual QueueDataBufferAbstract::Ref_t pop ( GTimeoutSec_t ) = 0;
22 };
23 
26 {
28 
29  virtual QueueDataBufferAbstract::Ref_t instanciateDataBufferRef ( ) = 0;
30  virtual void push ( QueueDataBufferAbstract::Ref_t& ) = 0;
31 };
32 
34 {
36 };
37 
38 
40 
42 {
44  g::cont::AllocationPolicyAbstract* ap = g::cont::AllocationPolicyAbstract::get_FromStandardPolicy() ,
45  int aAllocDeltaRBits = G_VECT_AL_DELTA_MASK_BITS ) : g::cont::vect<char>(ap,aAllocDeltaRBits){}
46 
48 
49  virtual void write ( const void* aData , size_t aSize )
50  {
51  size_t current_size = getSize();
52 
53  reSize ( current_size + aSize );
54 
55  g::cont::move_data ( (const char*) aData , (char*)(*this)+mOffset , aSize );
56 
57  mOffset += aSize;
58  }
59 
60  virtual const void* read ( void* aData , size_t aSize )
61  {
62  const char* current_data = ((const char*)(*this)) + mOffset;
63 
64  if ( aData != NULL )
65  {
66  g::cont::move_data<char> ( current_data , (char*) aData , aSize );
67  }
68 
69  mOffset += aSize;
70 
71  return current_data;
72  }
73 
74  virtual const void* getCurrentPtr ( ) { return ((const char*)(*this)) + mOffset; }
75 };
76 
78 {
79  DataBufferQueue_t queue;
80 
81  QueueTxRxSimple(g::cont::AllocationPolicyAbstract* ap = g::cont::AllocationPolicyAbstract::get_FromStandardPolicy ( )):queue(ap){}
82 
83  QueueDataBufferAbstract::Ref_t instanciateDataBufferRef ( ) { return g::cont::ref<StdSignalDataPacket>::g_cont_new(queue.getAllocPolicyP()); }
84  QueueDataBufferAbstract::Ref_t pop ( GTimeoutSec_t ) { return queue.popHead(); }
85  void push ( QueueDataBufferAbstract::Ref_t& aDataPacket ) { queue.pushTail(aDataPacket); }
86 };
87 
88 
89 }//namespace signal
90 }//namespace g
91 
Subclass for definng queue tx side.
Definition: g_signal_queue.h:25
Subclass for defining arbitrary data packet.
Definition: g_signal_queueDataBuffer.h:12
virtual void write(const void *aData, size_t aSize)
Copies size_t buffer bytes to THIS buffer from data parameter.
Definition: g_signal_queue.h:49
Definition: g_signal_queue.h:41
Definition: g_cont_AllocationPolicyAbstract.h:16
Definition: g.mthread.ThreadSimpleEvent.h:5
Subclass for defining queue rx side.
Definition: g_signal_queue.h:17
virtual const void * getCurrentPtr()
Gets current offsetted pointer.
Definition: g_signal_queue.h:74
Definition: g_cont_it_ref.h:10
Definition: g_cont_vect.h:15
Definition: g_signal_queue.h:33
virtual const void * read(void *aData, size_t aSize)
Copies buffer bytes to destination buffer if it is != NULL otherwise just move the offset...
Definition: g_signal_queue.h:60
Definition: g_signal_queue.h:77