ECDBuffer.h
Go to the documentation of this file.
1 /*--------------------------------------------------------------------------------------+
2 |
3 | Supplied under applicable software license agreement.
4 |
5 | Copyright (c) 2018 Bentley Systems, Incorporated. All rights reserved.
6 |
7 +---------------------------------------------------------------------------------------*/
8 #pragma once
9 #pragma once
10 
11 #include "ECObjects.h"
12 
13 
15 EC_TYPEDEFS(ScopedDataAccessor);
17 
22 
23 
25  {
30  };
31 
32 /*=================================================================================**/
38  {
39 private:
40  PropertyLayout (){}
41 
42 public:
43  ECOBJECTS_EXPORT WCharCP GetAccessString() const;
44  ECOBJECTS_EXPORT uint32_t GetParentStructIndex() const;
46  ECOBJECTS_EXPORT uint32_t GetNullflagsOffset() const;
47  ECOBJECTS_EXPORT NullflagsBitmask GetNullflagsBitmask() const;
48  ECOBJECTS_EXPORT ECTypeDescriptor GetTypeDescriptor() const;
49 
56  ECOBJECTS_EXPORT uint32_t GetModifierFlags() const;
57  ECOBJECTS_EXPORT uint32_t GetModifierData() const;
58  ECOBJECTS_EXPORT bool IsReadOnlyProperty () const;
59 
63  ECOBJECTS_EXPORT bool SetReadOnlyMask (bool readOnly);
64  ECOBJECTS_EXPORT bool IsFixedSized() const;
65  ECOBJECTS_EXPORT bool HoldsCalculatedProperty() const;
66 
69  ECOBJECTS_EXPORT uint32_t GetSizeInFixedSection() const;
70 
73  ECOBJECTS_EXPORT WString ToString();
74  };
75 
76  /*=================================================================================**/
82  {
83 private:
84  //ClassLayout (){}
85 
86 public:
87 
91  ECOBJECTS_EXPORT static ClassLayoutPtr BuildFromClass (ECClassCR ecClass);
92 
95  ECOBJECTS_EXPORT static ClassLayoutPtr CreateEmpty (WCharCP className);
96 
98  ECOBJECTS_EXPORT WString const & GetECClassName() const;
99 
103  ECOBJECTS_EXPORT int GetECPointerIndex (ECRelationshipEnd end) const;
104 
106  ECOBJECTS_EXPORT uint32_t GetChecksum () const;
107 
109  ECOBJECTS_EXPORT uint32_t GetPropertyCount () const;
110 
112  ECOBJECTS_EXPORT uint32_t GetPropertyCountExcludingEmbeddedStructs () const;
113 
118  ECOBJECTS_EXPORT ECObjectsStatus GetPropertyLayout (PropertyLayoutCP & propertyLayout, WCharCP accessString) const;
119 
124  ECOBJECTS_EXPORT ECObjectsStatus GetPropertyLayoutByIndex (PropertyLayoutCP & propertyLayout, uint32_t propertyIndex) const;
125 
130  ECOBJECTS_EXPORT ECObjectsStatus GetPropertyLayoutIndex (uint32_t& propertyIndex, PropertyLayoutCR propertyLayout) const;
131 
136  ECOBJECTS_EXPORT ECObjectsStatus GetPropertyIndex (uint32_t& propertyIndex, WCharCP accessString) const;
137 
141  ECOBJECTS_EXPORT bool IsPropertyReadOnly (uint32_t propertyIndex) const;
142 
147  ECOBJECTS_EXPORT bool SetPropertyReadOnly (uint32_t propertyIndex, bool readOnly) const;
148 
150  ECOBJECTS_EXPORT uint32_t CalculateBytesUsed(Byte const * propertyData) const;
151 
155  ECOBJECTS_EXPORT bool IsCompatible(ClassLayoutCR layout) const;
156 
158  ECOBJECTS_EXPORT WString ToString() const;
159  };
160 
162 typedef bvector<ClassLayoutPtr> ClassLayoutVector;
163 
164 /*=================================================================================**/
168 {
169 private:
170  SchemaLayout (){}
171 
172 public:
173 
175  ECOBJECTS_EXPORT SchemaIndex GetSchemaIndex() const;
176 
181  ECOBJECTS_EXPORT BentleyStatus AddClassLayout (ClassLayoutR classLayout, ClassIndex classIndex);
182 
187  ECOBJECTS_EXPORT BentleyStatus ReplaceClassLayout (ClassLayoutR classLayout, ClassIndex classIndex);
188 
192  ECOBJECTS_EXPORT ClassLayoutCP GetClassLayout (ClassIndex classIndex) const;
193 
197  ECOBJECTS_EXPORT ClassLayoutCP FindClassLayout (WCharCP className) const;
198 
203  ECOBJECTS_EXPORT BentleyStatus FindClassIndex (ClassIndex& classIndex, WCharCP className) const;
204 
208  ECOBJECTS_EXPORT BentleyStatus FindAvailableClassIndex (ClassIndex& classIndex) const;
209 
214  ECOBJECTS_EXPORT uint32_t GetMaxIndex () const;
215 
217  ECOBJECTS_EXPORT bool IsEmpty() const;
218 
222  ECOBJECTS_EXPORT static SchemaLayoutP Create (SchemaIndex index);
223 };
224 
225 //=======================================================================================
229 //=======================================================================================
230 struct ECDBuffer
231  {
232  friend struct ArrayResizer;
233  friend struct ECDBufferScope;
234 private:
235  mutable bool m_allowWritingDirectlyToInstanceMemory;
236  mutable bool m_allPropertiesCalculated;
237 
238 private:
239  virtual void MakeClassAbstract() = 0;
240 public:
241 public:
243  ECOBJECTS_EXPORT bool IsEmpty() const;
245  ECOBJECTS_EXPORT void ClearValues();
248  ECOBJECTS_EXPORT ECObjectsStatus CopyFromBuffer (ECDBufferCR source);
249  };
250 
ECObjectsStatus
General purpose result codes.
Definition: ECObjects.h:128
Definition: ECDBuffer.h:167
PropertyLayout const * PropertyLayoutCP
Definition: ECObjects.h:85
iterator end()
Definition: stdcxx/bstdmap.h:186
double GetOffset()
Definition: AssociativeElementAPI.h:239
wchar_t const * WCharCP
Definition: Bentley.h:224
ClassLayout const & ClassLayoutCR
Definition: ECObjects.h:84
#define ECOBJECTS_EXPORT
Definition: ECObjects.h:20
PropertyLayout const & PropertyLayoutCR
Definition: ECObjects.h:85
bvector< ClassLayoutPtr > ClassLayoutVector
Definition: ECDBuffer.h:162
BentleyStatus
Definition: Bentley.h:208
Definition: ECDBuffer.h:81
ECDBuffer const & ECDBufferCR
Definition: ECDBuffer.h:14
A shared pointer template for reference-counted objects.
Definition: RefCounted.h:119
ECRelationshipEnd
Used to define which end of the relationship, source or target.
Definition: ECSchema.h:767
ECClass const & ECClassCR
Definition: ECObjects.h:63
Definition: ECDBuffer.h:37
#define END_BENTLEY_ECOBJECT_NAMESPACE
Definition: DgnPlatform.h:41
ClassLayout const * ClassLayoutCP
Definition: ECObjects.h:84
Concrete class that can be used to implement the reference-counting pattern.
Definition: RefCounted.h:109
unsigned short uint16_t
Definition: Bentley.r.h:91
uint16_t SchemaIndex
Definition: ECDBuffer.h:20
uint16_t ClassIndex
Definition: ECDBuffer.h:19
Base class for ECN::IECInstance implementations that get/set values from a block of memory...
Definition: ECDBuffer.h:230
unsigned char Byte
Definition: Bentley.r.h:143
#define EC_TYPEDEFS(_name_)
Definition: ECObjects.h:29
unsigned int uint32_t
Definition: Bentley.r.h:93
RefCountedPtr< ClassLayout > ClassLayoutPtr
Definition: ECDBuffer.h:21
Used to represent the type of an ECProperty.
Definition: ECSchema.h:82
uint32_t NullflagsBitmask
Definition: ECDBuffer.h:18
#define ENUM_UNDERLYING_TYPE(T)
Definition: Bentley.h:70
A string class that has many of the same capabilities as std::string, plus additional functions such ...
Definition: WString.h:51
#define BEGIN_BENTLEY_ECOBJECT_NAMESPACE
Definition: DgnPlatform.h:40
ArrayModifierFlags
Definition: ECDBuffer.h:24

Copyright © 2017 Bentley Systems, Incorporated. All rights reserved.