#pragma once #include #include "MetaData.h" #include "JobContent.h" #include "expat.h" #define BIN_LIMIT_SIZE 524288000 //500m class JobMetaData : public MetaData { public: struct ParseAssist { unsigned int depth; string tempValue; Property* tempProperty; map depthMap; Part* lastPart; ParameterSet* lastParameterSet; BinaryFile* lastBinaryFile; Layer* lastLayer; DataBlock* lastDataBlock; //double fixDis; ScanField* lastScanField; ParseAssist() { depth = 0; tempValue = ""; tempProperty = NULL; lastPart = NULL; lastParameterSet = NULL; lastBinaryFile = NULL; lastLayer = NULL; lastDataBlock = NULL; lastScanField = NULL; // fixDis = 0.0; } }; public: JobMetaData(); ~JobMetaData(); bool LoadFile(string path, string filename, vector& bfileinfos,string binpath); bool LoadLayerByIndex(unsigned int lindex); bool GetLayerByIndex(unsigned int lindex, ::stream::LayerData** response); bool LoadLayer(Layer* layer); void SetJobContent(JobContent* job_content); bool LoadPrevLayer(Layer* layer); bool LoadPrevLayerByIndex(unsigned int lindex); bool LoadRemoteLayerByIndex(unsigned int index); bool LoadFirstLayer(); //float CalcEvaTime(float start_at = 0.0); //void ReCalcEvaTime(); void AddPart(Part* part); void DelPart(Part* part); private: static void XMLCALL StartElement(void *userData, const XML_Char *name, const XML_Char **attrs); static void XMLCALL EndElement(void *userData, const XML_Char *name); static void XMLCALL DataHandler(void *userData, const XML_Char *s, int len); bool ReadBDataBlock(LayerSummary* summary, Dimensions* partLayerDimensions, BPBinary::BinDataBlock* datablock, ifstream* ifs); //bool ReadBChains(LayerSummary* summary, BPBinary::ChainPoint* chainpoint, ifstream* ifs); private: map binary_files; JobContent* m_job_content; ParseAssist parseAssist; unsigned int m_ReadBytes; unsigned int m_TotalBytes; XML_Parser m_Parser; };