00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 #ifndef INC_RVC_DBELEM_H
00111 #define INC_RVC_DBELEM_H
00112
00113 #ifndef INC_RVC_DBASE_H
00114 #include <rvc/dbase.h>
00115 #endif
00116
00117 #ifndef INC_RVC_DBTABLE_H
00118 #include <rvc/dbtable.h>
00119 #endif
00120
00121 #ifndef INC_RVC_ELEMENT_H
00122 #include <rvc/element.h>
00123 #endif
00124
00125 #ifndef GENERATING_DOXYGEN_OUTPUT
00126 struct DBLISTELMT;
00127 #endif // GENERATING_DOXYGEN_OUTPUT
00128
00129 namespace RVC {
00130
00131 #ifndef GENERATING_DOXYGEN_OUTPUT
00132 class GEOSPATIAL;
00133 #endif // GENERATING_DOXYGEN_OUTPUT
00134
00135
00136 class DBASE_ELEMENT : public DBASE {
00137 public:
00138
00139 class ATTACHMENTITEM;
00140 typedef SIMPLE_ARRAY<ATTACHMENTITEM> ATTACHMENTARRAY;
00141
00142 typedef SIMPLE_ARRAY<DBLISTELMT> DBLIST;
00143
00144
00145 explicit DBASE_ELEMENT (
00146 ELEMTYPE ElemType
00147 );
00148
00149
00150 DBASE_ELEMENT (
00151 const RVC::DBASE_ELEMENT& rhs
00152 );
00153
00154
00155 virtual ~DBASE_ELEMENT (
00156 );
00157
00158
00159 RVC::DBASE_ELEMENT& operator= (
00160 const RVC::DBASE_ELEMENT& rhs
00161 );
00162
00163
00164 ERRVALUE AddAttachment (
00165 const RVC::ELEMENT& elem,
00166 const RVC::DBASE_ELEMENT::ATTACHMENTITEM& item
00167 );
00168
00169
00170 ERRVALUE AddAttachments (
00171 const RVC::ELEMENT& elem,
00172 const RVC::DBASE_ELEMENT::ATTACHMENTARRAY& items
00173 );
00174
00175
00176
00177 INT32 AppendDBList (
00178 INT32 ElemNum,
00179 const DBLIST& DBList
00180 );
00181
00182
00183
00184 INT32 AppendDBList (
00185 INT32 ElemNum,
00186 const DBLISTELMT& item
00187 );
00188
00189
00190 ERRVALUE CleanDBList (
00191 );
00192
00193
00194
00195 bool CompareElementRecords (
00196 INT32 LhsElemNum,
00197 const DBASE_ELEMENT& rhs,
00198 INT32 RhsElemNum,
00199 const SIMPLE_ARRAY<INT32>& TableMatch
00200 ) const;
00201
00202
00203
00204 ERRVALUE ConvertStyleAssignTableTo (
00205 DBASE_ELEMENT& DestDBaseObj
00206 );
00207
00208
00209 int GetAttachedElements (
00210 const RVC::DBTABLE::RECORD& record,
00211 SIMPLE_ARRAY<INT32>& ElementList,
00212 ELEMTYPE ElemType = ELEMTYPE_Empty
00213 ) const;
00214
00215
00216 int GetAttachedElements (
00217 const RVC::DBTABLE::RECORD& record,
00218 SIMPLE_ARRAY<RVC::ELEMENT>& ElementList,
00219 ELEMTYPE ElemType = ELEMTYPE_Empty
00220 ) const;
00221
00222
00223 ERRVALUE GetAttachedRecordList (
00224 INT32 ElemNum,
00225 DBLIST& DBList,
00226 FINDFLAG FindFlag = FINDFLAG_AllAttached,
00227 INT32 BaseTableNum = -1
00228 ) const;
00229
00230
00231
00232 INT32 GetAttachedRecordNumbers (
00233 const RVC::ELEMENT& element,
00234 const RVC::DBTABLE& table,
00235 SIMPLE_ARRAY<INT32>& recordnums,
00236 FINDFLAG findflags = FINDFLAG_AllAttached
00237 ) const;
00238
00239
00240 INT32 GetAttachments (
00241 const RVC::ELEMENT& elem,
00242 RVC::DBASE_ELEMENT::ATTACHMENTARRAY& items
00243 ) const;
00244
00245
00246
00247 INT32 GetDBListItemSize (
00248 INT32 ItemNum,
00249 bool ExcludeInternal = false
00250 ) const;
00251
00252
00253
00254 INT32 GetDBListMaxItemSize (
00255 ) const;
00256
00257
00258
00259 INT32 GetDBListNumElements (
00260 ) const;
00261
00262
00263 ELEMTYPE GetElemType (
00264 ) const { return (m_ElemType); }
00265
00266
00267
00268 bool HasAttachedElements (
00269 const RVC::DBTABLE::RECORD& record,
00270 ELEMTYPE ElemType = ELEMTYPE_All
00271 ) const;
00272
00273
00274 ERRVALUE OpenAsSubobject (
00275 const RVC::OBJITEM& ParentObjItem,
00276 OPENMODE mode = OPENMODE_Read,
00277 MDLGPARENT widget = 0
00278 );
00279
00280
00281 ERRVALUE OpenAsSubobject (
00282 const RVC::GEOSPATIAL& parent,
00283 OPENMODE mode = OPENMODE_Read,
00284 MDLGPARENT widget = 0
00285 );
00286
00287
00288
00289 INT32 ReadDBList (
00290 INT32 ElemNum,
00291 DBLIST& DBList
00292 ) const;
00293
00294
00295 ERRVALUE RemoveAttachment (
00296 const RVC::ELEMENT& elem,
00297 const RVC::DBASE_ELEMENT::ATTACHMENTITEM& item
00298 );
00299
00300
00301 ERRVALUE RemoveAttachments (
00302 const RVC::ELEMENT& elem,
00303 const RVC::DBASE_ELEMENT::ATTACHMENTARRAY& items
00304 );
00305
00306
00307 ERRVALUE ResizeDBList (
00308 INT32 NumItems
00309 );
00310
00311
00312 ERRVALUE ResizeDBListItem (
00313 INT32 ElemNum,
00314 INT32 NumItems
00315 );
00316
00317
00318 ERRVALUE SwapDBList (
00319 INT32 Item1,
00320 INT32 Item2
00321 );
00322
00323
00324
00325 INT32 WriteDBList (
00326 INT32 ElemNum,
00327 const DBLIST& DBList
00328 );
00329
00330
00331
00332 INT32 UnattachDBList (
00333 INT32 ElemNum,
00334 const DBLIST& DBList
00335 );
00336
00337
00338
00339 ERRVALUE UpdateDBListNumElements (
00340 INT32 NumElements
00341 );
00342
00343 private:
00344 #ifndef GENERATING_DOXYGEN_OUTPUT
00345
00346
00347 virtual OBJTYPE v_GetDftObjectType () const;
00348 virtual bool v_IsMultiObject () const;
00349
00350 ELEMTYPE m_ElemType;
00351 #endif
00352
00353 };
00354
00355
00356 class DBASE_ELEMENT::ATTACHMENTITEM {
00357 public:
00358
00359
00360 ATTACHMENTITEM (
00361 ) : m_TableNum(TABLE_Invalid), m_RecordNum(RECORD_New) {}
00362
00363
00364 ATTACHMENTITEM (
00365 const RVC::DBTABLE& table,
00366 INT32 recordnum
00367 );
00368
00369
00370
00371 INT32 GetTableNum (
00372 ) const {return (m_TableNum);}
00373
00374
00375
00376 INT32 GetRecordNum (
00377 ) const {return (m_RecordNum);}
00378
00379
00380 void SetTableNum (
00381 INT32 TableNum
00382 ) {m_TableNum = TableNum;}
00383
00384
00385 void SetRecordNum (
00386 INT32 RecordNum
00387 ) {m_RecordNum = RecordNum;}
00388
00389 private:
00390 #ifndef GENERATING_DOXYGEN_OUTPUT
00391
00392 INT32 m_TableNum;
00393 INT32 m_RecordNum;
00394
00395 operator const DBLISTELMT* (
00396 ) const {return (reinterpret_cast<const DBLISTELMT*>(this));}
00397
00398 operator DBLISTELMT* (
00399 ) {return (reinterpret_cast<DBLISTELMT*>(this));}
00400
00401 friend class DBASE_ELEMENT;
00402 #endif // GENERATING_DOXYGEN_OUTPUT
00403 };
00404
00405 }
00406
00407 #endif