00001
00002
00003
00004
00005
00006
00007
00008
00010
00011
00012 #ifndef Segment_H
00013 #define Segment_H
00014
00015
00016 #include "lt_base.h"
00017
00018
00019 #include "nitf_types.h"
00020
00021
00022 LT_BEGIN_LIZARDTECH_NAMESPACE
00023 class LTIOStreamInf;
00024 class LTIMetadataDatabase;
00025 class NITFReaderManager;
00026
00027 namespace Nitf {
00028 class SecurityBlock;
00029 class FieldReader;
00030 class FileHeader;
00031 class MetadataHelper;
00032 class SecurityMetadata;
00033 class TREData;
00034
00035
00042 class Segment
00043 {
00044 public:
00045
00046 Segment(NITFReaderManager&, LTIOStreamInf&,
00047 lt_int64 headerOffset, lt_int64 headerLength,
00048 lt_int64 dataOffset, lt_int64 dataLength,
00049 const char* code, int segmentNumber,
00050 bool doUserSubheader, bool doExtendedSubheader);
00051
00052
00053 virtual ~Segment();
00054
00062 virtual LT_STATUS initialize();
00063
00064 int getSegmentNumber() const;
00065 const char* getSegmentID();
00066
00067
00068 lt_int64 getHeaderOffset() const;
00069
00070
00071 lt_int64 getHeaderLength() const;
00072
00073
00074 lt_int64 getDataOffset() const;
00075
00076
00077 lt_int64 getDataLength() const;
00078
00079
00080 const SecurityBlock* getSecurityBlock() const;
00081
00085 const SecurityMetadata* getSecurityMetadata() const;
00086
00087
00088 virtual LT_STATUS addMetadata(LTIMetadataDatabase&) const;
00089
00090
00091 const char* getMetadataTagPrefix() const;
00092
00096 int getNumTREs() const;
00097
00106 const TREData* getTRE(int index) const;
00107
00108 protected:
00109 virtual LT_STATUS readHeader() = 0;
00110 virtual LT_STATUS readData() = 0;
00111
00112 virtual LT_STATUS addMetadataLocal(LTIMetadataDatabase&) const =0;
00113
00114 MetadataHelper* m_mdHelper;
00115
00116 FieldReader* m_field;
00117
00118 LTIOStreamInf& m_stream;
00119 const lt_int64 m_headerOffset;
00120 lt_int64 m_headerLength;
00121 const lt_int64 m_dataOffset;
00122 const lt_int64 m_dataLength;
00123
00124 NITFReaderManager& m_manager;
00125 Version m_version;
00126
00127 SecurityBlock* m_securityBlock;
00128
00129 const int m_segmentNumber;
00130 const char* m_segmentID;
00131
00132 private:
00133 void addTREChunk(const lt_uint8* bytes, int length);
00134 void addTRE(const char* tag, const lt_uint8* bytes, int length);
00135 TREData** m_treData;
00136 int m_treCount;
00137
00138 LT_STATUS readExtFields();
00139 LT_STATUS processTREs();
00140
00141 const char* m_code;
00142
00143 const bool m_doUserSubheader;
00144 const bool m_doExtendedSubheader;
00145 lt_int64 m_offsetUD;
00146 lt_int64 m_lenUD;
00147 int m_overflowUD;
00148 lt_int64 m_offsetX;
00149 lt_int64 m_lenX;
00150 int m_overflowX;
00151
00152 char* m_tagPrefix;
00153
00154
00155 Segment(Segment&);
00156 Segment& operator=(const Segment&);
00157 };
00158
00159
00160 }
00161 LT_END_LIZARDTECH_NAMESPACE
00162
00163 #endif // Segment_H