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 #ifndef INC_MI32_GEOCAT_H
00047 #define INC_MI32_GEOCAT_H
00048
00049 #ifndef INC_MI32_STDDEFNS_H
00050 #include <mi32/stddefns.h>
00051 #endif
00052
00053 #ifndef INC_MI32_MISTRING_H
00054 #include <mi32/mistring.h>
00055 #endif
00056
00057 #ifndef INC_MI32_DATETIME_H
00058 #include <mi32/datetime.h>
00059 #endif
00060
00061 #ifndef INC_MI32_FILEPATH_H
00062 #include <mi32/filepath.h>
00063 #endif
00064
00065 #ifndef INC_MI32_RECT_H
00066 #include <mi32/rect.h>
00067 #endif
00068
00069 #ifndef INC_MI32_POINT_H
00070 #include <mi32/point.h>
00071 #endif
00072
00073 #ifndef INC_MI32_REGION2D_H
00074 #include <mi32/region2d.h>
00075 #endif
00076
00077 #ifndef INC_MI32_RVCDBASE_H
00078 #include <mi32/rvcdbase.h>
00079 #endif
00080
00081 #ifndef INC_MI32_SIMPLEAR_H
00082 #include <mi32/simplear.h>
00083 #endif
00084
00085
00086 class STATUSCONTEXT;
00087
00088 #ifndef GENERATING_DOXYGEN_OUTPUT
00089
00090
00091
00092 class GEOCAT_ITERATOR_CURSOR;
00093 #endif
00094
00095
00096
00097
00098 class GEOCAT {
00099 public:
00100
00101
00102 class FILERECORD {
00103 public:
00104
00105
00106 enum FORMAT {
00107 FORMAT_RVC= 0
00108 };
00109
00110
00111 FILERECORD (
00112 );
00113
00114
00115 FILERECORD (
00116 const FILERECORD& rhs
00117 );
00118
00119
00120 ~FILERECORD (
00121 );
00122
00123
00124 FILERECORD& operator= (
00125 const FILERECORD& rhs
00126 );
00127
00128 UINT32 GetFileID (
00129 ) const {
00130 return (m_ID);
00131 }
00132
00133
00134 const FILEPATH& GetFilePath (
00135 ) const {
00136 return (m_filepath);
00137 }
00138
00139 FORMAT GetFormat (
00140 ) const {
00141 return (m_Format);
00142 }
00143
00144 FILEPATH::FILESYSTYPE GetMediaType (
00145 ) const {
00146 return (m_MediaType);
00147 }
00148
00149 const DATETIME& GetTimeStamp (
00150 ) const {
00151 return (m_TimeStamp);
00152 }
00153
00154
00155
00156
00157 void SetFilePath (
00158 const FILEPATH& filepath
00159 );
00160
00161 private:
00162 #ifndef GENERATING_DOXYGEN_OUTPUT
00163
00164 void SetID (
00165 UINT32 id
00166 ) {
00167 m_ID = id;
00168 return;
00169 }
00170
00171
00172 void SetTimeStamp (
00173 ) {
00174 time_t modtime;
00175 m_filepath.GetTimeModified(&modtime);
00176 m_TimeStamp = modtime;
00177 return;
00178 }
00179
00180 UINT32 m_ID;
00181 FILEPATH m_filepath;
00182 DATETIME m_TimeStamp;
00183 FILEPATH::FILESYSTYPE m_MediaType;
00184 FORMAT m_Format;
00185
00186 friend class GEOCAT;
00187 #endif // GENERATING_DOXYGEN_OUTPUT
00188 };
00189
00190
00191
00192 class OBJRECORD {
00193 public:
00194
00195
00196 OBJRECORD (
00197 );
00198
00199
00200 OBJRECORD (
00201 const OBJRECORD& rhs
00202 );
00203
00204
00205 ~OBJRECORD (
00206 );
00207
00208
00209 OBJRECORD& operator= (
00210 const OBJRECORD& rhs
00211 );
00212
00213
00214 const MISTRING& GetDescription (
00215 ) const {
00216 return (m_desc);
00217 }
00218
00219
00220 INT32 GetFileID (
00221 ) const {
00222 return (m_FileID);
00223 }
00224
00225
00226
00227 const MISTRING& GetFullName (
00228 ) const {
00229 return (m_FullName);
00230 }
00231
00232
00233 INT32 GetID (
00234 ) const {
00235 return (m_ID);
00236 }
00237
00238
00239 const MISTRING& GetName (
00240 ) const {
00241 return (m_name);
00242 }
00243
00244
00245 INT32 GetObjType (
00246 ) const {
00247 return (m_otype);
00248 }
00249
00250
00251 const REGION2D& GetRegion (
00252 ) const { return (m_Region); }
00253
00254
00255 void SetDescription (
00256 const UNICODE* desc
00257 ) { m_desc = desc; }
00258
00259
00260 void SetDescription (
00261 const MISTRING& desc
00262 ) { m_desc = desc; }
00263
00264
00265
00266
00267 void SetFile (
00268 const FILERECORD& file
00269 ) { m_FileID = file.GetFileID(); }
00270
00271
00272
00273
00274 void SetFullName (
00275 const UNICODE* name
00276 ) {
00277 m_FullName = name;
00278 return;
00279 }
00280
00281
00282
00283
00284 void SetFullName (
00285 const MISTRING& name
00286 ) {
00287 m_FullName = name;
00288 return;
00289 }
00290
00291
00292 void SetName (
00293 const UNICODE* name
00294 ) {
00295 m_name = name;
00296 return;
00297 }
00298
00299
00300 void SetName (
00301 const MISTRING& name
00302 ) {
00303 m_name = name;
00304 return;
00305 }
00306
00307
00308
00309 void SetObjectType (
00310 INT32 otype
00311 ) {
00312 m_otype = otype;
00313 return;
00314 }
00315
00316 private:
00317 #ifndef GENERATING_DOXYGEN_OUTPUT
00318
00319 void SetID (
00320 UINT32 id
00321 ) {
00322 m_ID = id;
00323 return;
00324 }
00325
00326 UINT32 m_FileID;
00327 UINT32 m_ID;
00328 MISTRING m_name;
00329 MISTRING m_FullName;
00330 MISTRING m_desc;
00331 int m_otype;
00332 REGION2D m_Region;
00333
00334 friend class GEOCAT;
00335 #endif // GENERATING_DOXYGEN_OUTPUT
00336 };
00337
00338
00339 class CONST_ITERATOR {
00340 public:
00341
00342 explicit CONST_ITERATOR (
00343 const GEOCAT *cat = 0
00344 ):
00345 m_cat(cat),
00346 m_Cursor(0),
00347 m_bIsEnd(true)
00348 { }
00349
00350
00351 ~CONST_ITERATOR (
00352 );
00353
00354
00355 CONST_ITERATOR (
00356 const CONST_ITERATOR& rhs
00357 );
00358
00359
00360 CONST_ITERATOR& operator= (
00361 const CONST_ITERATOR& rhs
00362 );
00363
00364
00365 const OBJRECORD& operator* (
00366 ) const {
00367 return (m_objrec);
00368 }
00369
00370
00371 const OBJRECORD* operator-> (
00372 ) const {
00373 return (&m_objrec);
00374 }
00375
00376
00377 CONST_ITERATOR& operator++ (
00378 );
00379
00380
00381 bool operator== (
00382 const CONST_ITERATOR& rhs
00383 ) const {
00384 return (m_cat == rhs.m_cat && (m_bIsEnd == rhs.m_bIsEnd || m_objrec.GetID() == rhs.m_objrec.GetID()));
00385 }
00386
00387
00388 bool operator!= (
00389 const CONST_ITERATOR& rhs
00390 ) const {
00391 return (!operator==(rhs));
00392 }
00393
00394
00395 ERRVALUE GetObject (
00396 RVCOBJITEM& objitem,
00397 bool findnow = false
00398 ) const;
00399
00400
00401
00402 ERRVALUE ShowProgress (
00403 STATUSCONTEXT& scontext,
00404 int line = 0
00405 );
00406
00407 private:
00408 #ifndef GENERATING_DOXYGEN_OUTPUT
00409
00410 const GEOCAT* m_cat;
00411 GEOCAT_ITERATOR_CURSOR *m_Cursor;
00412 OBJRECORD m_objrec;
00413 bool m_bIsEnd;
00414
00415 friend class GEOCAT;
00416 #endif // GENERATING_DOXYGEN_OUTPUT
00417 };
00418
00419
00420
00421
00422 static const SPATREF::COORDREFSYS& GetCoordRefSys (
00423 );
00424
00425
00426
00427 GEOCAT (
00428 );
00429
00430
00431 ~GEOCAT (
00432 );
00433
00434
00435 CONST_ITERATOR Begin (
00436 ) const;
00437
00438
00439 ERRVALUE Close (
00440 );
00441
00442
00443 const CONST_ITERATOR& End (
00444 ) const {
00445 return (m_EndIterator);
00446 }
00447
00448
00449 const FILEPATH& GetFilePath (
00450 ) const {
00451 return (m_filepath);
00452 }
00453
00454
00455
00456 ERRVALUE GetFileRecord (
00457 UINT32 id,
00458 FILERECORD& FileRecord
00459 ) const;
00460
00461
00462
00463 ERRVALUE GetFileRecord (
00464 const OBJRECORD& ObjRecord,
00465 FILERECORD& FileRecord
00466 ) const {
00467 return (GetFileRecord(ObjRecord.GetFileID(), FileRecord));
00468 }
00469
00470
00471
00472 ERRVALUE GetFileRecord (
00473 const FILEPATH& filepath,
00474 FILERECORD& record
00475 ) const;
00476
00477
00478
00479 ERRVALUE GetObjRecord (
00480 UINT32 id,
00481 OBJRECORD& record
00482 ) const;
00483
00484
00485 ERRVALUE Make (
00486 const FILEPATH& catalog
00487 );
00488
00489
00490
00491
00492
00493 ERRVALUE Open (
00494 const FILEPATH& catalog,
00495 bool bCreateIfNotFound = false
00496 );
00497
00498
00499 ERRVALUE PrescanDirectory (
00500 const FILEPATH& dir,
00501 STATUSCONTEXT& StatusContext,
00502 bool bScanSubDirs = true
00503 ) const;
00504
00505
00506
00507
00508 ERRVALUE Remove (
00509 const FILEPATH& file
00510 );
00511
00512
00513 ERRVALUE Remove (
00514 const FILERECORD& record
00515 );
00516
00517
00518 ERRVALUE Remove (
00519 const OBJRECORD& record
00520 );
00521
00522
00523
00524
00525
00526
00527
00528 ERRVALUE ScanDirectory (
00529 const FILEPATH& dir,
00530 STATUSCONTEXT* StatusContext = 0,
00531 bool bScanSubDirs = true
00532 );
00533
00534
00535
00536 ERRVALUE ScanFile (
00537 const FILEPATH& file
00538 );
00539
00540
00541
00542
00543
00544 ERRVALUE Write (
00545 OBJRECORD& record
00546 );
00547
00548
00549
00550
00551
00552 ERRVALUE Write (
00553 FILERECORD& record
00554 );
00555
00556 private:
00557 #ifndef GENERATING_DOXYGEN_OUTPUT
00558
00559 ERRVALUE Read (
00560 int RecNum,
00561 FILERECORD& record
00562 ) const;
00563
00564 ERRVALUE Read (
00565 int RecNum,
00566 OBJRECORD& record
00567 ) const;
00568
00569 ERRVALUE Read (
00570 GEOCAT_ITERATOR_CURSOR* cursor,
00571 OBJRECORD& record
00572 ) const;
00573
00574 ERRVALUE ReadObjRecord (
00575 INT32 recnum,
00576 UINT32 recnumtype,
00577 OBJRECORD& record
00578 ) const;
00579
00580 ERRVALUE ScanFolder (
00581 int fhandle,
00582 RVCINODENUM parentinode,
00583 const FILERECORD& FileRecords
00584 );
00585
00586 ERRVALUE ScanObject (
00587 int fhandle,
00588 RVCINODENUM objinode,
00589 int objtype,
00590 const FILERECORD& FileRecords
00591 );
00592
00593 RVCFILEHANDLE m_fhandle;
00594 int m_dbhandle;
00595 int m_OpenCount;
00596 int m_FileTableNum;
00597 int m_ObjTableNum;
00598 int m_RgnTableNum;
00599 UINT8* m_recbuf;
00600 INT32 m_BufSize;
00601 FILEPATH m_filepath;
00602 CONST_ITERATOR m_EndIterator;
00603
00604 SIMPLE_ARRAY<DBFIELDINFO> m_FileFields;
00605 SIMPLE_ARRAY<DBFIELDINFO> m_ObjFields;
00606 SIMPLE_ARRAY<DBFIELDINFO> m_RgnFields;
00607
00608
00609 GEOCAT (const GEOCAT&);
00610 GEOCAT& operator= (const GEOCAT&);
00611
00612
00613 friend class CONST_ITERATOR;
00614 #endif // GENERATING_DOXYGEN_OUTPUT
00615 };
00616
00617
00618 #endif
00619