Version: 9.16.0
Any.hxx
Go to the documentation of this file.
1// Copyright (C) 2006-2026 CEA, EDF
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of the GNU Lesser General Public
5// License as published by the Free Software Foundation; either
6// version 2.1 of the License, or (at your option) any later version.
7//
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12//
13// You should have received a copy of the GNU Lesser General Public
14// License along with this library; if not, write to the Free Software
15// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16//
17// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18//
19
20#ifndef __YACSANY_HXX__
21#define __YACSANY_HXX__
22
24#include "RefCounter.hxx"
25#include "Exception.hxx"
26#include "SharedPtr.hxx"
27
28#include <vector>
29
30namespace YACS
31{
32 namespace ENGINE
33 {
34 class Any;
35 class AtomAny;
36 class TypeCode;
37 class SeqAlloc;
38 class ArrayAny;
39 class StructAny;
40 class SequenceAny;
41 class TypeCodeArray;
42 class TypeCodeStruct;
43 typedef void (*Deallocator)(void *);
44
45#ifndef SWIG
46 YACSLIBENGINE_EXPORT std::string ToBase64(const std::string& bytes);
47 YACSLIBENGINE_EXPORT std::string FromBase64(const std::string& bytes);
48 YACSLIBENGINE_EXPORT std::string FromBase64Safe(const std::string& bytes);
49#endif
50
52 {
53 friend class Any;
54 friend class AtomAny;
55 friend class ArrayAny;
56 private:
57 StringOnHeap(const char *val);
58 StringOnHeap(const char *val, std::size_t len);
59 StringOnHeap(const std::string& val);
60 StringOnHeap(char *val, Deallocator deAlloc);
61 bool operator ==(const StringOnHeap& other) const;
62 StringOnHeap *deepCopy() const;
63 const char *cStr() const { return _str; }
64 std::size_t size() const { return _len; }
66 private:
67 char *_str;
68 std::size_t _len;
70 };
71
73
79 {
80 friend class SeqAlloc;
81 friend class ArrayAny;
82 friend class StructAny;
83 friend class SequenceAny;
84 public:
85 const TypeCode *getType() const { return _type; }
86 //for convenience methods
87 virtual Any *clone() const = 0;
88 virtual AnyPtr operator[](int i) const = 0;
89 virtual AnyPtr operator[](const char *key) const = 0;
90 virtual bool operator ==(const Any& other) const = 0;
91 virtual int getIntValue() const = 0;
92 virtual bool getBoolValue() const = 0;
93 virtual double getDoubleValue() const = 0;
94 virtual std::string getStringValue() const = 0;
95 //
96 protected:
97#ifndef SWIG
98 virtual ~Any();
99#endif
100 Any(TypeCode* type);
101 Any(const Any& other);
102 virtual void putMyReprAtPlace(char *data) const = 0;
103 //static AnyPtr buildAnyFromCoarseData(char *data, TypeCode* type); //Factory Method
104 static bool IsNull(char *data);
105 protected:
107 };
108
110
112 {
113 friend class TypeCode;
114 friend class TypeCodeObjref;
115
117 {
118 int _i;
119 bool _b;
120 double _d;
122 };
123 public:
124 Any *clone() const;
125 template<class T>
126 static AtomAny *New(T val) { return new AtomAny(val); }
127 static AtomAny *New(char *val, Deallocator dealloc);
128 static AtomAny *New(const std::string& val, TypeCode *type);
129 AnyPtr operator[](int i) const;
130 AnyPtr operator[](const char *key) const;
131 bool operator ==(const Any& other) const;
132 int getIntValue() const;
133 bool getBoolValue() const;
134 double getDoubleValue() const;
135 std::string getStringValue() const;
136 const char *getBytesValue(std::size_t& len) const;
137 protected:
138 void putMyReprAtPlace(char *data) const;
139 static void putReprAtPlace(char *data, const char *src, const TypeCode *type, bool deepCpy);
140 static void destroyReprAtPlace(char *data, const TypeCode *type);
141 static AnyPtr getOrBuildFromData(char *data, const TypeCode *type);
142 static bool takeInChargeStorageOf(TypeCode *type);
143 private:
144 ~AtomAny();
145 AtomAny(int val);
146 AtomAny(bool val);
147 AtomAny(double val);
148 AtomAny(const char *val);
149 AtomAny(const std::string& val);
150 AtomAny(const std::string& val, TypeCode* type);
151 AtomAny(const AtomAny& other);
152 AtomAny(char *data, TypeCode* type);
153 AtomAny(char *val, Deallocator deAlloc);
154 protected:
156 };
157
159 {
160 friend class SequenceAny;
161
162 char *_start;
163 char *_finish;
166 const unsigned int _sizeOf1Elm;
167 private:
168 SeqAlloc(const SeqAlloc& other);
169 SeqAlloc(unsigned int sizeOf1Elm);
170 ~SeqAlloc();
171 void clear();
172 void initCoarseMemory(char *mem, unsigned int size, Deallocator dealloc);
173 void construct(char *pt, const Any *val);
174 void construct(char *pt, const char *val, const TypeCode *tc, bool deepCpy);
175 char *allocate(unsigned int nbOfByte);
176 void destroy(char *pt, const TypeCode *tc);
177 void deallocate(char *pt);
178 unsigned int size() const;
179 std::vector<unsigned int> getSetItems() const;
180 public:
181 static const char DFT_CHAR_VAR;
182 };
183
185 {
186 public:
187 virtual void setEltAtRank(int i, const Any *elem) = 0;
188 AnyPtr operator[](const char *key) const;
189 protected:
190 ComposedAny(const ComposedAny& other);
191 ComposedAny(TypeCode* type, bool isNew=true);
192 protected:
193 void checkTypeOf(const Any *elem) const;
194 private://error methods called during incorrect runtime extraction
195 int getIntValue() const;
196 bool getBoolValue() const;
197 double getDoubleValue() const;
198 std::string getStringValue() const;
199 };
200
202
204 {
205 friend class TypeCodeSeq;
206 public:
207 void clear();
208 void popBack();
209 unsigned int size() const { return _alloc.size(); }
210 void pushBack(const Any *elem);
211 bool operator ==(const Any& other) const;
212 void setEltAtRank(int i, const Any *elem);
213 AnyPtr operator[](int i) const;
214 Any *clone() const;
215 template<class T>
216 static SequenceAny *New(const std::vector<T>& vec);
217 static SequenceAny *New(const TypeCode *typeOfContent);
218 static SequenceAny *New(const TypeCode *typeOfContent, unsigned lgth);
219 template<class T>
220 static SequenceAny *New(T *val, unsigned int lgth, Deallocator deAlloc);
221 std::vector<unsigned int> getSetItems() const { return _alloc.getSetItems(); }
222 SequenceAny *removeUnsetItemsFromThis() const;
223 protected:
224 void putMyReprAtPlace(char *data) const;
225 static void putReprAtPlace(char *data, const char *src, const TypeCode *type, bool deepCpy);
226 static void destroyReprAtPlace(char *data, const TypeCode *type);
227 static AnyPtr getOrBuildFromData(char *data, const TypeCode *type);
228 static bool takeInChargeStorageOf(TypeCode *type);
229 private:
230 ~SequenceAny();
231 SequenceAny(const SequenceAny& other);
232 SequenceAny(const TypeCode *typeOfContent);
233 SequenceAny(const TypeCode *typeOfContent, unsigned lgth);
234 SequenceAny(int *val, unsigned int lgth, Deallocator deAlloc);
235 SequenceAny(bool *val, unsigned int lgth, Deallocator deAlloc);
236 SequenceAny(double *val, unsigned int lgth, Deallocator deAlloc);
237 SequenceAny(const std::vector<int>& val);
238 SequenceAny(const std::vector<bool>& val);
239 SequenceAny(const std::vector<double>& val);
240 SequenceAny(const std::vector<std::string>& val);
241 void realloc(char *endOfCurrentAllocated, const Any *elem);
242 char *performCpy(char *srcStart, char *srcFinish, char *destStart);
243 protected:
245 };
246
248
250 {
251 friend class TypeCodeArray;
252 public:
253 void setEltAtRank(int i, const Any *elem);
254 bool operator ==(const Any& other) const;
255 AnyPtr operator[](int i) const;
256 unsigned int size() const;
257 Any *clone() const;
258 template<class T>
259 static ArrayAny *New(const std::vector<T>& vec);
260 template<class T>
261 static ArrayAny *New(const T *val, unsigned int lgth);
262 static ArrayAny *New(const TypeCode *typeOfContent, unsigned int lgth);
263 protected:
264 void putMyReprAtPlace(char *data) const;
265 static void putReprAtPlace(char *data, const char *src, const TypeCodeArray *type, bool deepCpy);
266 static void destroyReprAtPlace(char *data, const TypeCodeArray *type);
267 static AnyPtr getOrBuildFromData(char *data, const TypeCodeArray *type);
268 static bool takeInChargeStorageOf(TypeCode *type);
269 private:
270 ~ArrayAny();
271 ArrayAny(const TypeCode *typeOfContent, unsigned int lgth);
272 ArrayAny(char *data, TypeCodeArray * type);
273 ArrayAny(const ArrayAny& other);
274 ArrayAny(const int *val, unsigned int lgth);
275 ArrayAny(const bool *val, unsigned int lgth);
276 ArrayAny(const double *val, unsigned int lgth);
277 ArrayAny(const std::vector<int>& val);
278 ArrayAny(const std::vector<double>& val);
279 ArrayAny(const std::vector<std::string>& val);
280 protected:
281 char *_data;
282 };
283
285
287 {
288 friend class TypeCodeStruct;
289 public:
290 Any *clone() const;
291 bool operator ==(const Any& other) const;
292 static StructAny *New(TypeCodeStruct *type);
293 AnyPtr operator[](int i) const;
294 AnyPtr operator[](const char *key) const;
295 void setEltAtRank(int i, const Any *elem);
296 void setEltAtRank(const char *key, const Any *elem);
297 protected:
298 void putMyReprAtPlace(char *data) const;
299 static void putReprAtPlace(char *data, const char *src, const TypeCodeStruct *type, bool deepCpy);
300 static void destroyReprAtPlace(char *data, const TypeCodeStruct *type);
301 static AnyPtr getOrBuildFromData(char *data, const TypeCodeStruct *type);
302 private:
303 ~StructAny();
305 StructAny(const StructAny& other);
306 StructAny(char *data, TypeCodeStruct * type);
307 private:
308 char *_data;
309 };
310
311 template<class T>
312 SequenceAny *SequenceAny::New(T *val, unsigned int lgth, Deallocator deAlloc)
313 {
314 return new SequenceAny(val,lgth,deAlloc);
315 }
316
317 template<class T>
318 SequenceAny *SequenceAny::New(const std::vector<T>& vec)
319 {
320 return new SequenceAny(vec);
321 }
322
323 template<class T>
324 ArrayAny *ArrayAny::New(const std::vector<T>& vec)
325 {
326 return new ArrayAny(vec);
327 }
328
329 template<class T>
330 ArrayAny *ArrayAny::New(const T *val, unsigned int lgth)
331 {
332 return new ArrayAny(val,lgth);
333 }
334 }
335}
336
337#endif
#define YACSLIBENGINE_EXPORT
: Allow to manage memory of instances of T. The only constraint on T is to have method incrRef and De...
Definition: SharedPtr.hxx:30
: Interface for management of storage of data formated dynamically in its TypeCode....
Definition: Any.hxx:79
friend class SequenceAny
Definition: Any.hxx:83
virtual std::string getStringValue() const =0
TypeCode * _type
Definition: Any.hxx:106
virtual int getIntValue() const =0
virtual void putMyReprAtPlace(char *data) const =0
virtual AnyPtr operator[](int i) const =0
virtual AnyPtr operator[](const char *key) const =0
virtual double getDoubleValue() const =0
virtual bool getBoolValue() const =0
const TypeCode * getType() const
Definition: Any.hxx:85
friend class ArrayAny
Definition: Any.hxx:81
virtual Any * clone() const =0
static ArrayAny * New(const std::vector< T > &vec)
Definition: Any.hxx:324
static AtomAny * New(T val)
Definition: Any.hxx:126
ValueContainer _value
Definition: Any.hxx:155
virtual void setEltAtRank(int i, const Any *elem)=0
char * _endOfStorage
Definition: Any.hxx:164
const unsigned int _sizeOf1Elm
Definition: Any.hxx:166
static const char DFT_CHAR_VAR
Definition: Any.hxx:181
Deallocator _notStdDeAlloc
Definition: Any.hxx:165
std::vector< unsigned int > getSetItems() const
Definition: Any.hxx:221
unsigned int size() const
Definition: Any.hxx:209
static SequenceAny * New(const std::vector< T > &vec)
Definition: Any.hxx:318
std::size_t _len
Definition: Any.hxx:68
const char * cStr() const
Definition: Any.hxx:63
std::size_t size() const
Definition: Any.hxx:64
Deallocator _dealloc
Definition: Any.hxx:69
Class for array objects.
Definition: TypeCode.hxx:193
Class for reference objects.
Definition: TypeCode.hxx:126
Class for sequence objects.
Definition: TypeCode.hxx:160
Class for struct type.
Definition: TypeCode.hxx:228
Base class for all type objects.
Definition: TypeCode.hxx:68
YACSLIBENGINE_EXPORT std::string FromBase64Safe(const std::string &bytes)
Definition: Any.cxx:167
SharedPtr< AtomAny > AtomAnyPtr
Definition: Any.hxx:109
SharedPtr< Any > AnyPtr
Definition: Any.hxx:72
SharedPtr< ArrayAny > ArrayAnyPtr
Definition: Any.hxx:247
SharedPtr< StructAny > StructAnyPtr
Definition: Any.hxx:284
void(* Deallocator)(void *)
Definition: Any.hxx:43
SharedPtr< SequenceAny > SequenceAnyPtr
Definition: Any.hxx:201
YACSLIBENGINE_EXPORT std::string ToBase64(const std::string &bytes)
Definition: Any.cxx:85
YACSLIBENGINE_EXPORT std::string FromBase64(const std::string &bytes)
Definition: Any.cxx:151