LCOV - code coverage report
Current view: top level - frmts/pcidsk/sdk/segment - cpcidskvectorsegment.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 2 3 66.7 %
Date: 2024-11-21 22:18:42 Functions: 2 3 66.7 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Purpose:  Declaration of the CPCIDSKVectorSegment class.
       4             :  *
       5             :  ******************************************************************************
       6             :  * Copyright (c) 2009
       7             :  * PCI Geomatics, 90 Allstate Parkway, Markham, Ontario, Canada.
       8             :  *
       9             :  * SPDX-License-Identifier: MIT
      10             :  ****************************************************************************/
      11             : #ifndef INCLUDE_SEGMENT_PCIDSKVECTORSEGMENT_H
      12             : #define INCLUDE_SEGMENT_PCIDSKVECTORSEGMENT_H
      13             : 
      14             : #include "pcidsk_config.h"
      15             : #include "pcidsk_types.h"
      16             : #include "pcidsk_vectorsegment.h"
      17             : #include "pcidsk_buffer.h"
      18             : #include "segment/cpcidsksegment.h"
      19             : #include "segment/vecsegheader.h"
      20             : #include "segment/vecsegdataindex.h"
      21             : 
      22             : #include <string>
      23             : #include <map>
      24             : 
      25             : namespace PCIDSK
      26             : {
      27             :     class PCIDSKFile;
      28             : 
      29             :     const int     sec_vert = 0;
      30             :     const int     sec_record = 1;
      31             :     const int     sec_raw = 2;
      32             : 
      33             :     /************************************************************************/
      34             :     /*                        CPCIDSKVectorSegment                          */
      35             :     /************************************************************************/
      36             : 
      37             :     class CPCIDSKVectorSegment final: virtual public CPCIDSKSegment,
      38             :                                       public PCIDSKVectorSegment
      39             :     {
      40             :         friend class VecSegHeader;
      41             :         friend class VecSegDataIndex;
      42             : 
      43             :     public:
      44             :         CPCIDSKVectorSegment( PCIDSKFile *file, int segment,
      45             :                               const char *segment_pointer );
      46             : 
      47             :         virtual        ~CPCIDSKVectorSegment();
      48             : 
      49             :         void            Initialize() override;
      50             :         void            Synchronize() override;
      51             : 
      52           0 :         std::string     GetRst() override { return ""; }
      53             :         std::vector<double> GetProjection( std::string &geosys ) override;
      54             :         void            SetProjection(const std::string& geosys,
      55             :                                       const std::vector<double>& params) override;
      56             : 
      57             :         int             GetFieldCount() override;
      58             :         std::string     GetFieldName(int) override;
      59             :         std::string     GetFieldDescription(int) override;
      60             :         ShapeFieldType  GetFieldType(int) override;
      61             :         std::string     GetFieldFormat(int) override;
      62             :         ShapeField      GetFieldDefault(int) override;
      63             : 
      64          10 :         ShapeIterator   begin() override { return ShapeIterator(this); }
      65          20 :         ShapeIterator   end() override { return ShapeIterator(this,NullShapeId); }
      66             : 
      67             :         ShapeId         FindFirst() override;
      68             :         ShapeId         FindNext(ShapeId) override;
      69             : 
      70             :         int             GetShapeCount() override;
      71             : 
      72             :         void            GetVertices( ShapeId, std::vector<ShapeVertex>& ) override;
      73             :         void            GetFields( ShapeId, std::vector<ShapeField>& ) override;
      74             : 
      75             :         void            AddField( const std::string& name, ShapeFieldType type,
      76             :                                   const std::string& description,
      77             :                                   const std::string& format,
      78             :                                   ShapeField *default_value ) override;
      79             : 
      80             :         ShapeId         CreateShape( ShapeId id ) override;
      81             :         void            DeleteShape( ShapeId id ) override;
      82             :         void            SetVertices( ShapeId id,
      83             :                                      const std::vector<ShapeVertex>& list ) override;
      84             :         void            SetFields( ShapeId id,
      85             :                                    const std::vector<ShapeField>& list ) override;
      86             : 
      87             :         std::string     ConsistencyCheck() override;
      88             : 
      89             :         // Essentially internal stuff.
      90             :         char                *GetData( int section, uint32 offset,
      91             :                                       int *bytes_available = nullptr,
      92             :                                       int min_bytes = 0,
      93             :                                       bool update = false );
      94             :         uint32               ReadField( uint32 offset,
      95             :                                         ShapeField& field,
      96             :                                         ShapeFieldType field_type,
      97             :                                         int section = sec_record );
      98             : 
      99             :         uint32               WriteField( uint32 offset,
     100             :                                          const ShapeField& field,
     101             :                                          PCIDSKBuffer &buffer );
     102             :         void                 ReadSecFromFile( int section, char *buffer,
     103             :                                               int block_offset,
     104             :                                               int block_count );
     105             :         void                 WriteSecToFile( int section, char *buffer,
     106             :                                              int block_offset,
     107             :                                              int block_count );
     108             : 
     109             :      private:
     110             :         bool            base_initialized;
     111             :         bool            needs_swap;
     112             : 
     113             :         VecSegHeader    vh;
     114             :         VecSegDataIndex di[2];
     115             : 
     116             :         int32                total_shape_count;
     117             :         int32                valid_shape_count;
     118             :         ShapeId              highest_shapeid_used;
     119             :         //ShapeId              first_shape_id;
     120             :         //ShapeId              last_shape_id;
     121             : 
     122             :         int32                shape_index_start;       // index of first shape
     123             :         std::vector<int32>   shape_index_ids;         // loaded shape ids.
     124             :         std::vector<uint32>  shape_index_vertex_off;  // loaded vertex offsets
     125             :         std::vector<uint32>  shape_index_record_off;  // loaded record offsets.
     126             :         bool                 shape_index_page_dirty;
     127             : 
     128             :         ShapeId              last_shapes_id;
     129             :         int                  last_shapes_index;
     130             : 
     131             :         bool                 shapeid_map_active;
     132             :         std::map<ShapeId,int> shapeid_map;
     133             :         int                  shapeid_pages_certainly_mapped;
     134             : 
     135             :         void                 AccessShapeByIndex( int iIndex );
     136             :         int                  IndexFromShapeId( ShapeId id );
     137             :         void                 LoadShapeIdPage( int page );
     138             :         void                 FlushLoadedShapeIndex();
     139             :         void                 PushLoadedIndexIntoMap();
     140             :         void                 PopulateShapeIdMap();
     141             : 
     142             :         // Cached buffers for GetData();
     143             :         PCIDSKBuffer         raw_loaded_data;
     144             :         uint32               raw_loaded_data_offset;
     145             :         bool                 raw_loaded_data_dirty;
     146             : 
     147             :         PCIDSKBuffer         vert_loaded_data;
     148             :         uint32               vert_loaded_data_offset;
     149             :         bool                 vert_loaded_data_dirty;
     150             : 
     151             :         PCIDSKBuffer         record_loaded_data;
     152             :         uint32               record_loaded_data_offset;
     153             :         bool                 record_loaded_data_dirty;
     154             : 
     155             :         bool                 vh_dirty = false;
     156             : 
     157             :         void                 FlushDataBuffer( int section );
     158             :         void                 LoadHeader();
     159             :         void                 FlushSegHeaderIfNeeded();
     160             : 
     161             :         std::string          ConsistencyCheck_Header();
     162             :         std::string          ConsistencyCheck_DataIndices();
     163             :         std::string          ConsistencyCheck_ShapeIndices();
     164             : 
     165             :         ShapeId         FindNextValidByIndex(int nIndex);
     166             :     };
     167             : } // end namespace PCIDSK
     168             : 
     169             : #endif // INCLUDE_SEGMENT_VECTORSEGMENT_H

Generated by: LCOV version 1.14