FARGOS/VISTA Object Management Environment Core  ..
FARGOS/VISTA Object Management Environment Core Table of Contents
OMEarray.h
Go to the documentation of this file.
1 #ifndef _OME_ARRAY_H
2 #define _OME_ARRAY_H "$Id: OMEarray.h 312 2020-03-21 21:25:35Z geoff $"
4 
14 #include <map>
15 
16 #include <OMErefCount.h>
17 
18 typedef class OMEbaseType *OMEbaseTypeP;
19 
20 // OMEarrayStorage is used internally by OMEarray, thus all of its
21 // members are private and OMEarray is listed as a friend.
22 
23 class OMEarrayStorage final : public OMEreferenceCount
24 {
25  friend class OMEarray;
27 public:
28  typedef uint64_t ARRAY_SUBSCRIPT_t;
29 
30 private:
31  typedef _STD map<ARRAY_SUBSCRIPT_t, OMEbaseTypeP> SparseArrayType_t;
33 
34  // default initializer
36 
37  // destructor
39 
40  virtual OMEreferenceCount *deepCopy() const override;
41 
42  bool operator==(const OMEarrayStorage &arg) const;
43 
44  bool operator!=(const OMEarrayStorage &arg) const;
45 
46  OMEbaseType &operator[](const ARRAY_SUBSCRIPT_t);
47 
48  const OMEbaseType &operator[](const ARRAY_SUBSCRIPT_t) const;
49 
50  bool deleteIndex(const ARRAY_SUBSCRIPT_t);
51 
52  bool indexExists(const ARRAY_SUBSCRIPT_t) const;
53 
54  ARRAY_SUBSCRIPT_t nextIndex(const ARRAY_SUBSCRIPT_t currentSubscript) const;
55 
56  ARRAY_SUBSCRIPT_t priorIndex(const ARRAY_SUBSCRIPT_t currentSubscript) const;
57 
58  inline uint_fast32_t elementCount() const OME_ALWAYS_INLINE
59  {
60  return (sparseArray.size());
61  }
62 
63  inline bool isEmpty() const OME_ALWAYS_INLINE
64  {
65  return (sparseArray.empty());
66  }
67 
68  template <typename STREAMTYPE>
69  STREAMTYPE &outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent = 0,
70  uint8_t includeTypePrefix = OME_DEFAULT_COMPLEX_OUTPUT_MODE) const;
71 }; // end class OMEarrayStorage
72 
73 
74 
75 class OME_DLL_EXPORT OMEarray final : public OMEreferenceToData<OMEarrayStorage>
76 {
77 private:
78  // typedef OMEarrayStorage::SparseArrayType_t SparseArrayType_t;
79 
81  {
82  // only used by deepCopy()
83  data = s;
84  // TODO: may add unwanted reference since storage objects have
85  // initial reference count of 1
86  // addReadOnlyReference();
87  }
88 
89 public:
91 
92  // default initializer
94  {
95  data = new OMEarrayStorage();
96  }
97 
98  // copy initializer
99  explicit OMEarray(const OMEarray &org) : OMEreferenceToData<OMEarrayStorage>(org.data)
100  {
101 // data = org.data;
102 // addReadOnlyReference();
103  }
104 
105  // assignment
107  {
108  if (this->data == arg.data) {
109  //std::cout << "OMEarray assignment to self, ref=" << totalReferences() << "\n";
110  return (*this); // asignment to self...
111  }
112  arg.data->addReadOnlyReference();
113  dropReference(arg.data);
114  return (*this);
115  }
116 
118 
119  // COMPARISON
120  inline bool operator==(const OMEarray &arg) const
121  {
122  if (data == arg.data) {
123  return (true); // fast path
124  }
125  return (*data == *arg.data);
126  }
127 
128  inline bool operator!=(const OMEarray &arg) const
129  {
130  if (data == arg.data) {
131  return (false); // fast path
132  }
133  return (*data != *arg.data);
134  }
135 
136  inline OMEbaseType &operator[](const uint32_t i) OME_ALWAYS_INLINE
137  {
139  return ((*data)[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
140  }
141 
142  inline OMEbaseType &operator[](const int32_t i) OME_ALWAYS_INLINE
143  {
145  return ((*data)[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
146  }
147 
148  inline OMEbaseType &operator[](const uint64_t i) OME_ALWAYS_INLINE
149  {
151  return ((*data)[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
152  }
153 
154  inline OMEbaseType &operator[](const uint16_t i) OME_ALWAYS_INLINE
155  {
157  return ((*data)[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
158  }
159 
160  inline const OMEbaseType &operator[](const uint32_t i) const OME_ALWAYS_INLINE
161  {
162  const OMEarrayStorage &a = *data;
163  return (a[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
164  }
165 
166  inline const OMEbaseType &operator[](const int32_t i) const OME_ALWAYS_INLINE
167  {
168  const OMEarrayStorage &a = *data;
169  return (a[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
170  }
171 
172  inline const OMEbaseType &operator[](const uint64_t i) const OME_ALWAYS_INLINE
173  {
174  const OMEarrayStorage &a = *data;
175  return (a[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
176  }
177 
178  inline const OMEbaseType &operator[](const uint16_t i) const OME_ALWAYS_INLINE
179  {
180  const OMEarrayStorage &a = *data;
181  return (a[static_cast<ARRAY_SUBSCRIPT_t>(i)]);
182  }
183 
184  inline bool deleteIndex(const uint32_t i)
185  {
187  return (data->deleteIndex(static_cast<ARRAY_SUBSCRIPT_t>(i)));
188  }
189 
190  inline bool deleteIndex(const uint64_t i)
191  {
193  return (data->deleteIndex(static_cast<ARRAY_SUBSCRIPT_t>(i)));
194  }
195 
196  inline bool forceDeleteIndex(const ARRAY_SUBSCRIPT_t i)
197  {
198  // don't do getUniqueReference()
199  return (data->deleteIndex(i));
200  }
201 
202  inline bool indexExists(const uint32_t i) const
203  {
204  return (data->indexExists(static_cast<ARRAY_SUBSCRIPT_t>(i)));
205  }
206 
207  inline bool indexExists(const int32_t i) const
208  {
209  return (data->indexExists(static_cast<ARRAY_SUBSCRIPT_t>(i)));
210  }
211 
212  inline bool indexExists(const uint64_t i) const
213  {
214  return (data->indexExists(static_cast<ARRAY_SUBSCRIPT_t>(i)));
215  }
216 
217  inline ARRAY_SUBSCRIPT_t nextIndex(const uint32_t currentSubscript) const
218  {
219  return (data->nextIndex(static_cast<ARRAY_SUBSCRIPT_t>(currentSubscript)));
220  }
221 
222  inline ARRAY_SUBSCRIPT_t nextIndex(const int32_t currentSubscript) const
223  {
224  return (data->nextIndex(static_cast<ARRAY_SUBSCRIPT_t>(currentSubscript)));
225  }
226 
227  inline ARRAY_SUBSCRIPT_t nextIndex(const uint64_t currentSubscript) const
228  {
229  return (data->nextIndex(static_cast<ARRAY_SUBSCRIPT_t>(currentSubscript)));
230  }
231 
232  inline ARRAY_SUBSCRIPT_t priorIndex(const uint32_t currentSubscript) const
233  {
234  return (data->priorIndex(static_cast<ARRAY_SUBSCRIPT_t>(currentSubscript)));
235  }
236 
237  inline ARRAY_SUBSCRIPT_t priorIndex(const int32_t currentSubscript) const
238  {
239  return (data->priorIndex(static_cast<ARRAY_SUBSCRIPT_t>(currentSubscript)));
240  }
241 
242  inline ARRAY_SUBSCRIPT_t priorIndex(const uint64_t currentSubscript) const
243  {
244  return (data->priorIndex(static_cast<ARRAY_SUBSCRIPT_t>(currentSubscript)));
245  }
246 
247  inline uint_fast32_t elementCount() const OME_ALWAYS_INLINE
248  {
249  return (data->elementCount());
250  }
251 
252  inline bool isEmpty() const OME_ALWAYS_INLINE
253  {
254  return (data->isEmpty());
255  }
256 
258  {
259  OMEarrayStorage *storageCopy = static_cast<OMEarrayStorage *>(data->deepCopy());
260  OMEarray *copy = new OMEarray(storageCopy);
261  return (copy);
262  }
263 
274  template <typename STREAMTYPE>
275  STREAMTYPE &outputOnStream(STREAMTYPE &outputStream,
276  int_fast16_t indent = 0,
277  uint8_t includeTypePrefix = OME_DEFAULT_COMPLEX_OUTPUT_MODE) const
278  {
279  data->outputOnStream(outputStream, indent, includeTypePrefix);
280  return (outputStream);
281  }
282 }; // end class OMEarray
283 
286 template <typename STREAMTYPE>
287 inline STREAMTYPE &operator<<(STREAMTYPE &outputStream, const OMEarray &data)
288 {
289  data.outputOnStream(outputStream, 0);
290  return (outputStream);
291 }
292 
293 #define OME_ARRAY_SUBSCRIPT_t(v) static_cast<OMEarray::ARRAY_SUBSCRIPT_t>(v)
294 
298 #endif
299 /* vim: set expandtab shiftwidth=4 tabstop=4: */
OMEarrayStorage::ARRAY_SUBSCRIPT_t
uint64_t ARRAY_SUBSCRIPT_t
Definition: OMEarray.h:28
OMEarray::operator==
bool operator==(const OMEarray &arg) const
Definition: OMEarray.h:120
OMErefCount.h
OME reference count implementation.
OMEconnection::sendString
int sendString(const OMEstring &data, int *errRet=nullptr)
Definition: OMEapi.cpp:555
OMEconnection::secret
OMEstring secret
Definition: OMEapi.h:24
OMEconnection::peerOID
OMEtype peerOID
Definition: OMEapi.h:28
OMEconnection::negotiateKey
int negotiateKey()
Definition: OMEapi.cpp:116
OMEarray::priorIndex
ARRAY_SUBSCRIPT_t priorIndex(const uint64_t currentSubscript) const
Definition: OMEarray.h:242
OMEinitNewCipher
int OMEinitNewCipher(const OMEstring &initVector)
Definition: aesCover.cpp:29
OMEarray::operator[]
const OMEtype & operator[](const uint32_t i) const OME_ALWAYS_INLINE
Definition: OMEarray.h:160
OMEprofileCounter< uint32_t >
OMEarray::operator[]
OMEtype & operator[](const uint64_t i) OME_ALWAYS_INLINE
Subscript reference !
Definition: OMEarray.h:148
s
const char s[]
Definition: t.cpp:4
OMEdebugFlag
SMV_StandaloneNumeric< uint32_t > OMEdebugFlag("debugFlag")
OMEconnection::encryptCipherID
int encryptCipherID
Definition: OMEapi.h:30
OMEarray::forceDeleteIndex
bool forceDeleteIndex(const ARRAY_SUBSCRIPT_t i)
Similar to deleteIndex(), but does not ensure a single reference to the array is held.
Definition: OMEarray.h:196
OMEarrayStorage::deepCopy
virtual OMEreferenceCount * deepCopy() const override
Definition: OMEarray.cpp:34
OMEarray::deleteIndex
bool deleteIndex(const uint32_t i)
Definition: OMEarray.h:184
OMEconnection::receiveString
OMEstring * receiveString(int *errRet=nullptr)
Definition: OMEapi.cpp:624
OMEconnection::decryptKeyID
int decryptKeyID
Definition: OMEapi.h:33
OMEarrayStorage::indexExists
bool indexExists(const ARRAY_SUBSCRIPT_t) const
Definition: OMEarray.cpp:145
OMElistDefinedEncodingVersions
uint_fast16_t OMElistDefinedEncodingVersions(OMEarray &list)
Obtain a list of available encoding routines.
Definition: OMEencode.cpp:134
OMEstring
Implements text and binary string storage.
Definition: OMEstring.h:305
OMEarray::operator[]
OMEtype & operator[](const uint16_t i) OME_ALWAYS_INLINE
Definition: OMEarray.h:154
OMEencodeBuffer
Buffer into which OMEtype data is encoded.
Definition: OMEencode.h:54
stderr
#define stderr
Definition: tmp.o.cpp:3115
OMEreferenceToData::data
C * data
Definition: OMErefCount.h:82
OMEarray::indexExists
bool indexExists(const uint32_t i) const
Definition: OMEarray.h:202
OMEarrayStorage::elementCount
uint_fast32_t elementCount() const OME_ALWAYS_INLINE
Definition: OMEarray.h:58
OMEtype::value
union OMEtype::@26 value
OMEencryptString
int OMEencryptString(int useCipher, int useKey, const OMEstring &input, OMEstring &result)
Definition: aesCover.cpp:124
OMEtype
Fundamental ANY type for FARGOS/VISTA Object Management Environment.
Definition: OMEbaseType.h:250
OMEarrayStorage
Reference-counted maintainer of a sparse array.
Definition: OMEarray.h:23
OMEmakePublicKey
OMEstring * OMEmakePublicKey(const OMEstring &privateKey)
Definition: pkRoutines.cpp:192
OMEconnection::encryptKeyID
int encryptKeyID
Definition: OMEapi.h:31
OMEconnection::thisObject
OMEoid * thisObject
Definition: OMEapi.h:26
OMEreferenceCount::unlockMe
void unlockMe()
Definition: OMErefCount.cpp:132
OMEmakeSessionKeyFromPublicKey
OMEstring * OMEmakeSessionKeyFromPublicKey(const OMEstring &publicKey, OMEstring &randomDataInSessionKeyOut)
Definition: pkRoutines.cpp:255
OMEarrayStorage::SparseArrayType_t
_STD map< ARRAY_SUBSCRIPT_t, OMEbaseTypeP > SparseArrayType_t
Definition: OMEarray.h:31
OMEarray::nextIndex
ARRAY_SUBSCRIPT_t nextIndex(const int32_t currentSubscript) const
Definition: OMEarray.h:222
OMEdebugMethodInvocations
#define OMEdebugMethodInvocations
Definition: OMEdebugInfo.h:18
OMEtype::s
class OMEstring * s
Definition: OMEbaseType.h:299
OMEconnection::VISTAdomainName
OMEstring VISTAdomainName
Definition: OMEapi.h:35
OMEthisProcessInfo::hostName
OMEstring hostName
Definition: OMEprocInfo.h:67
OMEarray::outputOnStream
STREAMTYPE & outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent=0, uint8_t includeTypePrefix=OME_DEFAULT_COMPLEX_OUTPUT_MODE) const
Output an OMEarray to an output stream.
Definition: OMEarray.h:275
OMEdecryptString
int OMEdecryptString(int useCipher, int useKey, const OMEstring &input, OMEstring &result)
Definition: aesCover.cpp:179
OMEarray::OMEarray
OMEarray(const OMEarray &org)
Definition: OMEarray.h:99
OMEarrayStorage::OMEarrayStorage
OMEarrayStorage()
Definition: OMEarray.cpp:18
OMEreferenceToData
Templated type-specific reference to a reference-counted object.
Definition: OMErefCount.h:79
OMEarrayStorage::deleteIndex
bool deleteIndex(const ARRAY_SUBSCRIPT_t)
Definition: OMEarray.cpp:102
OMEreferenceCount
Base class for reference-counted data.
Definition: OMErefCount.h:31
OMEarray::OMEarray
OMEarray(OMEarrayStorage *s)
Definition: OMEarray.h:80
OMEarray::priorIndex
ARRAY_SUBSCRIPT_t priorIndex(const uint32_t currentSubscript) const
Definition: OMEarray.h:232
OMEarray::deepCopy
OMEarray * deepCopy() const
Definition: OMEarray.h:257
OMEarray::indexExists
bool indexExists(const uint64_t i) const
Indicate if an array element exists.
Definition: OMEarray.h:212
OMEarrayStorage::isEmpty
bool isEmpty() const OME_ALWAYS_INLINE
Definition: OMEarray.h:63
srcID
const char srcID[]
Definition: catSym.c:17
OME_STRING
@ OME_STRING
Definition: OMEmanifests.h:85
OMEconnection::freeEncryptionResources
void freeEncryptionResources()
Definition: OMEapi.cpp:89
OMEarray::operator[]
const OMEtype & operator[](const int32_t i) const OME_ALWAYS_INLINE
Definition: OMEarray.h:166
OMEdecryptSessionKeyWithPrivateKey
OMEstring * OMEdecryptSessionKeyWithPrivateKey(const OMEstring &privateKey, const OMEstring &data)
Definition: pkRoutines.cpp:296
OMEmakePrivateKey
OMEstring * OMEmakePrivateKey(const OMEstring &secretPhrase)
Definition: pkRoutines.cpp:156
OMEdefineNewEncryptKey
int OMEdefineNewEncryptKey(const OMEstring &key)
Definition: aesCover.cpp:95
OMEarray::priorIndex
ARRAY_SUBSCRIPT_t priorIndex(const int32_t currentSubscript) const
Definition: OMEarray.h:237
OMEdefineNewDecryptKey
int OMEdefineNewDecryptKey(const OMEstring &key)
Definition: aesCover.cpp:103
OME_NIL
@ OME_NIL
Definition: OMEmanifests.h:78
OME_EXPECT_TRUE
#define OME_EXPECT_TRUE(expr)
Annotation macro for conditional expression expected to be true.
Definition: compiler_hints.h:541
operator<<
STREAMTYPE & operator<<(STREAMTYPE &outputStream, const OMEarray &data)
Write an OMEarray to an output stream.
Definition: OMEarray.h:287
OMEarray::operator[]
const OMEtype & operator[](const uint16_t i) const OME_ALWAYS_INLINE
Definition: OMEarray.h:178
OMEarrayStorage::nextIndex
ARRAY_SUBSCRIPT_t nextIndex(const ARRAY_SUBSCRIPT_t currentSubscript) const
Definition: OMEarray.cpp:160
OMEarrayStorage::~OMEarrayStorage
~OMEarrayStorage()
Definition: OMEarray.cpp:22
OMEtype.h
OME fundamental type implementation.
OMEarrayStorage::operator!=
bool operator!=(const OMEarrayStorage &arg) const
Definition: OMEarray.cpp:262
OMEarray::indexExists
bool indexExists(const int32_t i) const
Definition: OMEarray.h:207
OMEconnection::decryptCipherID
int decryptCipherID
Definition: OMEapi.h:32
OMEarray::operator[]
OMEtype & operator[](const int32_t i) OME_ALWAYS_INLINE
Definition: OMEarray.h:142
OMEcurrentProcessInfo
OMEthisProcessInfo OMEcurrentProcessInfo
Automatic instantiation of OMEthisProcessInfo. When properly linked, the C++ static constructor mecha...
Definition: OMEprocInfo.cpp:217
OME_USED
const char srcID[] OME_USED
Definition: tick_time.cpp:24
OMEconnection::remoteOID
OMEtype remoteOID
Definition: OMEapi.h:27
OMEarray::operator!=
bool operator!=(const OMEarray &arg) const
Definition: OMEarray.h:128
OMEarray::~OMEarray
~OMEarray()
Definition: OMEarray.h:117
_OME_ARRAY_H
#define _OME_ARRAY_H
Definition: tmp.o.cpp:964
OMEarray::elementCount
uint_fast32_t elementCount() const OME_ALWAYS_INLINE
Definition: OMEarray.h:247
OMEreferenceCount::addReadOnlyReference
void addReadOnlyReference()
Definition: OMErefCount.cpp:139
OME_SET
@ OME_SET
Definition: OMEmanifests.h:89
OMEarray::isEmpty
bool isEmpty() const OME_ALWAYS_INLINE
Definition: OMEarray.h:252
OMEarray::deleteIndex
bool deleteIndex(const uint64_t i)
Deletes the element identified by internal subscript i.
Definition: OMEarray.h:190
OMEarray::nextIndex
ARRAY_SUBSCRIPT_t nextIndex(const uint32_t currentSubscript) const
Definition: OMEarray.h:217
OME_ALWAYS_INLINE
#define OME_ALWAYS_INLINE
Tell the compiler to alway inline a function, regardless of optimization level.
Definition: compiler_hints.h:364
OMEbaseTypeP
class OMEtype * OMEbaseTypeP
Definition: OMEarray.h:18
OMEreferenceToData::dropReference
void dropReference(C *newData=nullptr) OME_ALWAYS_INLINE
Definition: OMErefCount.h:91
OMEreferenceCount::lockMe
void lockMe()
Definition: OMErefCount.cpp:125
OMEgetSigningFile
OMEtype * OMEgetSigningFile(const OMEstring &secret, const OMEstring &logicalDomain, bool isPublic=false)
Definition: OMElicense.cpp:648
OMEarray::operator[]
OMEtype & operator[](const uint32_t i) OME_ALWAYS_INLINE
Definition: OMEarray.h:136
OMEarray.h
OME sparse array implementation.
OMEdebugEvents
#define OMEdebugEvents
Definition: OMEdebugInfo.h:23
_STD
#define _STD
Definition: OMEmanifests.h:146
OMEdebugInfo.h
OME debug and profiling interfaces.
OMEreferenceToData::getUniqueReference
void getUniqueReference()
Force unique reference to the data, which will trigger duplication if necessary (copy-on-write).
Definition: OMErefCount.h:127
OME_DLL_EXPORT
#define OME_DLL_EXPORT
Definition: compiler_hints.h:464
OMEarray
Implements sparse array of OMEtype elements.
Definition: OMEarray.h:75
OMEarrayStorage::priorIndex
ARRAY_SUBSCRIPT_t priorIndex(const ARRAY_SUBSCRIPT_t currentSubscript) const
Definition: OMEarray.cpp:178
OMEarrayStorage::operator[]
OMEtype & operator[](const ARRAY_SUBSCRIPT_t)
Definition: OMEarray.cpp:63
OMEarrayStorage::outputOnStream
STREAMTYPE & outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent=0, uint8_t includeTypePrefix=OME_DEFAULT_COMPLEX_OUTPUT_MODE) const
Definition: OMEoutputOnStream.h:17
OMEmakeRandomKey
OMEstring * OMEmakeRandomKey(int32_t bits=1024)
Generate a random sequence of bits.
Definition: pkRoutines.cpp:46
OMEtype::type
uint32_t type
Definition: OMEbaseType.h:304
OME_DEFAULT_COMPLEX_OUTPUT_MODE
@ OME_DEFAULT_COMPLEX_OUTPUT_MODE
Definition: OMEmanifests.h:116
OMEconnection::decodeData
OMEtype * decodeData(const OMEstring &data)
Definition: OMEapi.cpp:109
OMEarray::OMEarray
OMEarray()
Definition: OMEarray.h:93
OME_ARRAY
@ OME_ARRAY
Definition: OMEmanifests.h:86
OMEarray::ARRAY_SUBSCRIPT_t
OMEarrayStorage::ARRAY_SUBSCRIPT_t ARRAY_SUBSCRIPT_t
Definition: OMEarray.h:90
OMEtype
#define OMEtype
Definition: tmp.o.cpp:396
OMEarray::operator[]
const OMEtype & operator[](const uint64_t i) const OME_ALWAYS_INLINE
Definition: OMEarray.h:172
OME_ASSOC
@ OME_ASSOC
Definition: OMEmanifests.h:87
OMEarray::nextIndex
ARRAY_SUBSCRIPT_t nextIndex(const uint64_t currentSubscript) const
Return next valid subscript in an array.
Definition: OMEarray.h:227
OMEarray::operator=
OMEarray & operator=(const OMEarray &arg)
Definition: OMEarray.h:106
OMEarrayStorage::sparseArray
SparseArrayType_t sparseArray
Definition: OMEarray.h:32
OMEarrayStorage::operator==
bool operator==(const OMEarrayStorage &arg) const
Definition: OMEarray.cpp:209
Generated: Tue Jul 28 2020 16:03:25
Support Information