MAK Data Logger API Documentation for DIS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lgrVariableLengthData.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 1992-2025 MAK Technologies, Inc
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
9 #ifndef lgrVariableLengthData_H_
10 #define lgrVariableLengthData_H_
11 
12 #include <memory.h>
13 #include <vlutil/vlMachineTypes.h>
14 
15 namespace MAKLogger
16 {
17 
22  {
23  public:
25  myData(0),
26  mySize()
27  {
28  }
29 
31  DtLgrVariableLengthData(void const * inData, unsigned long inSize) :
32  myData(0),
33  mySize(0)
34  {
35  setData(inData,inSize);
36  }
37 
38  //Dupcliate object (with new copy of the object).
40  myData(0),
41  mySize(0)
42  {
43  setData(rhs.data(),rhs.size());
44  }
45 
46 
48  {
49  delete[] (char*)myData;
50  myData = 0;
51  mySize = 0;
52  }
53 
55  bool operator<(const DtLgrVariableLengthData& rhs) const
56  {
57  if(size() < rhs.size()) return true;
58  if(size() > rhs.size()) return false;
59  //Check size and do 1 integer compare if possible. Start with 4 for MAK RTI
60  if( size() == 4 )
61  {
62  const DtInt32* intPtr1 = (const DtInt32*)data();
63  const DtInt32* intPtr2 = (const DtInt32*)rhs.data();
64  return (*intPtr1 < *intPtr2);
65  }
66  else if( size() == 8 )
67  {
68  const DtInt64* intPtr1 = (const DtInt64*)data();
69  const DtInt64* intPtr2 = (const DtInt64*)rhs.data();
70  if(*intPtr1 < *intPtr2) return true;
71  }
72  else if( size() == 2 )
73  {
74  const DtInt16* intPtr1 = (const DtInt16*)data();
75  const DtInt16* intPtr2 = (const DtInt16*)rhs.data();
76  return (*intPtr1 < *intPtr2);
77  }
78 
79  //Do memcmp
80  return memcmp(data(), rhs.data(), size()) < 0;
81  }
82 
84  bool operator==(const DtLgrVariableLengthData& rhs) const
85  {
86  if(size() != rhs.size()) return false;
87 
91  if( size() == 4 )
92  {
93  const DtInt32* intPtr1 = (const DtInt32*)data();
94  const DtInt32* intPtr2 = (const DtInt32*)rhs.data();
95  if(*intPtr1 != *intPtr2) return false;
96  }
97  else if( size() == 8 )
98  {
99  const DtInt64* intPtr1 = (const DtInt64*)data();
100  const DtInt64* intPtr2 = (const DtInt64*)rhs.data();
101  if(*intPtr1 != *intPtr2) return false;
102  }
103  else if( size() == 2 )
104  {
105  const DtInt16* intPtr1 = (const DtInt16*)data();
106  const DtInt16* intPtr2 = (const DtInt16*)rhs.data();
107  if(*intPtr1 != *intPtr2) return false;
108  }
109  else
110  {
111  return memcmp(data(), rhs.data(), size()) == 0;
112  }
113  return true;
114  }
115 
118  {
119  setData(rhs.data(),rhs.size());
120  return *this;
121  }
122 
126  void const * data() const {return myData;}
127  void* data() {return myData;}
128  unsigned int size() const {return mySize;}
129 
131  void setData(void const * inData, unsigned long inSize)
132  {
133  delete[] (char*)myData;
134  if(inSize != 0)
135  {
136  myData = (void*)new char[inSize];
137  }
138  else
139  {
140  myData = 0;
141  }
142  mySize = inSize;
143  memcpy(myData,inData,mySize);
144  }
145 
149  void setDataPointer(void* inData, unsigned long inSize)
150  {
151  myData = inData;
152  mySize = inSize;
153  }
154 
158  void takeDataPointer(void* inData, unsigned long inSize)
159  {
160  delete[] (char*)myData;
161  myData = inData;
162  mySize = inSize;
163  }
164 
169  {
170  myData = 0;
171  mySize = 0;
172  }
173 
174  private:
175  void* myData;
176  unsigned long mySize;
177 
178  };
179 }
180 
181 #endif
#define DT_DLL_LGRSIM
Definition: lgrSim.h:21
~DtLgrVariableLengthData()
Definition: lgrVariableLengthData.h:47
unsigned long mySize
Definition: lgrVariableLengthData.h:176
bool operator==(const DtLgrVariableLengthData &rhs) const
Comparison operator.
Definition: lgrVariableLengthData.h:84
void setDataPointer(void *inData, unsigned long inSize)
Manually sets the data pointer and size, existing data pointer is not deallocated.
Definition: lgrVariableLengthData.h:149
DtLgrVariableLengthData(DtLgrVariableLengthData const &rhs)
Definition: lgrVariableLengthData.h:39
void setData(void const *inData, unsigned long inSize)
Caller is free to delete inData after the call.
Definition: lgrVariableLengthData.h:131
unsigned int size() const
Definition: lgrVariableLengthData.h:128
void const * data() const
This pointer should not be expected to be valid past the lifetime of this object, or past the next ti...
Definition: lgrVariableLengthData.h:126
DtLgrVariableLengthData()
Definition: lgrVariableLengthData.h:24
void * myData
Definition: lgrVariableLengthData.h:175
bool operator<(const DtLgrVariableLengthData &rhs) const
Comparison operator.
Definition: lgrVariableLengthData.h:55
Variable length data object compile-time compatible with the RTI 1516 implementation.
Definition: lgrVariableLengthData.h:21
void releaseDataPointer()
VariableLengthData releases ownership of memory and sets internal pointer to null.
Definition: lgrVariableLengthData.h:168
void * data()
Definition: lgrVariableLengthData.h:127
DtLgrVariableLengthData(void const *inData, unsigned long inSize)
Initialize the object with a copy of inData for inSize.
Definition: lgrVariableLengthData.h:31
void takeDataPointer(void *inData, unsigned long inSize)
Caller gives up ownership of inData to this object.
Definition: lgrVariableLengthData.h:158
DtLgrVariableLengthData & operator=(DtLgrVariableLengthData const &rhs)
Caller is free to delete rhs after the call.
Definition: lgrVariableLengthData.h:117

Document ID: Generated on Thu Dec 18 15:35:09 EST 2025 from SVN revision 282494
Copyright © 2024 MAK Technologies. All Rights Reserved (www.mak.com)