Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OGDI Bridge 4 : * Purpose: Private definitions within the OGDI driver to implement 5 : * integration with OGR. 6 : * Author: Daniel Morissette, danmo@videotron.ca 7 : * (Based on some code contributed by Frank Warmerdam :) 8 : * 9 : ****************************************************************************** 10 : * Copyright (c) 2000, Daniel Morissette 11 : * 12 : * SPDX-License-Identifier: MIT 13 : ****************************************************************************/ 14 : 15 : #ifndef OGDOGDI_H_INCLUDED 16 : #define OGDOGDI_H_INCLUDED 17 : 18 : #include <math.h> 19 : extern "C" 20 : { 21 : /* Older versions of OGDI have register keywords as qualifier for arguments 22 : * of functions, which is illegal in C++17 */ 23 : #define register 24 : #include "ecs.h" 25 : #undef register 26 : } 27 : #include "ogrsf_frmts.h" 28 : 29 : /************************************************************************/ 30 : /* OGROGDILayer */ 31 : /************************************************************************/ 32 : class OGROGDIDataSource; 33 : 34 : class OGROGDILayer final : public OGRLayer 35 : { 36 : OGROGDIDataSource *m_poODS; 37 : int m_nClientID; 38 : char *m_pszOGDILayerName; 39 : ecs_Family m_eFamily; 40 : 41 : OGRFeatureDefn *m_poFeatureDefn; 42 : OGRSpatialReference *m_poSpatialRef; 43 : ecs_Region m_sFilterBounds; 44 : 45 : int m_iNextShapeId; 46 : int m_nTotalShapeCount; 47 : int m_nFilteredOutShapes; 48 : 49 : OGRFeature *GetNextRawFeature(); 50 : 51 : public: 52 : OGROGDILayer(OGROGDIDataSource *, const char *, ecs_Family); 53 : virtual ~OGROGDILayer(); 54 : OGRErr ISetSpatialFilter(int iGeomField, 55 : const OGRGeometry *poGeom) override; 56 : virtual OGRErr SetAttributeFilter(const char *pszQuery) override; 57 : 58 : void ResetReading() override; 59 : OGRFeature *GetNextFeature() override; 60 : 61 : OGRFeature *GetFeature(GIntBig nFeatureId) override; 62 : 63 1899 : OGRFeatureDefn *GetLayerDefn() override 64 : { 65 1899 : return m_poFeatureDefn; 66 : } 67 : 68 : GIntBig GetFeatureCount(int) override; 69 : 70 : int TestCapability(const char *) override; 71 : 72 : private: 73 : void BuildFeatureDefn(); 74 : }; 75 : 76 : /************************************************************************/ 77 : /* OGROGDIDataSource */ 78 : /************************************************************************/ 79 : 80 : class OGROGDIDataSource final : public GDALDataset 81 : { 82 : OGROGDILayer **m_papoLayers; 83 : int m_nLayers; 84 : 85 : int m_nClientID; 86 : 87 : ecs_Region m_sGlobalBounds; 88 : OGRSpatialReference *m_poSpatialRef; 89 : 90 : OGROGDILayer *m_poCurrentLayer; 91 : 92 : int m_bLaunderLayerNames; 93 : 94 : void IAddLayer(const char *pszLayerName, ecs_Family eFamily); 95 : 96 : public: 97 : OGROGDIDataSource(); 98 : ~OGROGDIDataSource(); 99 : 100 : int Open(const char *); 101 : 102 455 : int GetLayerCount() override 103 : { 104 455 : return m_nLayers; 105 : } 106 : 107 : OGRLayer *GetLayer(int) override; 108 : 109 608 : ecs_Region *GetGlobalBounds() 110 : { 111 608 : return &m_sGlobalBounds; 112 : } 113 : 114 19 : OGRSpatialReference *DSGetSpatialRef() 115 : { 116 19 : return m_poSpatialRef; 117 : } 118 : 119 19 : int GetClientID() 120 : { 121 19 : return m_nClientID; 122 : } 123 : 124 1378 : OGROGDILayer *GetCurrentLayer() 125 : { 126 1378 : return m_poCurrentLayer; 127 : } 128 : 129 8 : void SetCurrentLayer(OGROGDILayer *poLayer) 130 : { 131 8 : m_poCurrentLayer = poLayer; 132 8 : } 133 : 134 19 : int LaunderLayerNames() 135 : { 136 19 : return m_bLaunderLayerNames; 137 : } 138 : }; 139 : 140 : #endif /* OGDOGDI_H_INCLUDED */