#include "MetaData.h" #include #include "../utils/CryptHelper.h" #include #include #include #include "../external/minizip/zlib.h" #include "../LanguageManager.h" #include "../SystemInfo.h" MetaData::MetaData() :evaTime(0) , m_RemainTime(0) , m_RemoteLayer(nullptr) , m_IsScanOrderForPlatform(false) , m_IsScanOrderSeqV2(false) , m_HasOrder(false) { file_info = new FileInfo(); general_info = new GeneralInfo(); layers = new Layers(); machine_type = new MachineType(); m_CoverCfg = ConfigManager::GetInstance()->GetCoverCfg(); m_ArmCfg = ConfigManager::GetInstance()->GetArmCfg(); m_ExtCfg = ConfigManager::GetInstance()->GetExtCfg(); m_RunCfg = ConfigManager::GetInstance()->GetRunCfg(); m_MachineCfg = ConfigManager::GetInstance()->GetMachineCfg(); m_Machine = ConfigManager::GetInstance()->GetMachine(); //m_ProgressInfo = g_LngManager->UI_AnalyzingJobData->ShowText(); InitializeCriticalSection(&m_DBCS); //InitializeCriticalSection(&m_MsgCs); InitializeCriticalSection(&partCs); } MetaData::~MetaData() { if (file_info)delete file_info; if (general_info)delete general_info; for (map::iterator it = partsMap.begin(); it != partsMap.end(); it++) { Part* part = it->second; if (part)delete part; } partsMap.clear(); partsVec.clear(); for (map::iterator it = parameterMap.begin(); it != parameterMap.end(); it++) { delete it->second; } parameterMap.clear(); ClearBFileMap(); ClearBlockMap(); ClearPrevBlockMap(); ClearRemoteBlockMap(); if (layers)delete layers; if (machine_type)delete machine_type; DeleteCriticalSection(&partCs); DeleteCriticalSection(&m_DBCS); } void MetaData::CalcRealPower(void) { for (size_t partIndex = 0; partIndex < partsVec.size(); partIndex++) { Part* part = partsVec[partIndex]; for (set::iterator it = part->paramSet.begin(); it != part->paramSet.end(); it++) { ParameterSet* ps = (*it); if (m_FieldRefScanLaser.find(ps->scan_field) != m_FieldRefScanLaser.end()) { ScannerControlCfg* cfg = m_FieldRefScanLaser[ps->scan_field]; if (cfg) { ps->laser_set->laser_real_power = cfg->m_ScanCfgWrapper.m_PowerCompensateCfg.CalcPowerCompensate(ps->laser_set->laser_power); } } } } } void MetaData::GetPartId(int layerIndex, set& partIds) { int layersize = layers->vector_layers.size(); if (layerIndex >= layersize)return; Layer* layer = layers->vector_layers[layerIndex]; for (size_t i = 0; i < layer->data_blocks.size(); ++i) { Part* part = partsMap[layer->data_blocks[i]->references->part]; if (part)partIds.insert(part->id); } } BPBinary::BinDataBlock* MetaData::GetDataBlock(DataBlock* db) { if (m_block_map.find(db) != m_block_map.end()) { return m_block_map[db]; } else return NULL; } BPBinary::BinDataBlock* MetaData::GetPreviewData(MetaData::DataBlockList* dblist, unsigned int index) { if (!dblist) return nullptr; return m_prev_block_map[(*dblist)[index]]; } BPBinary::BinDataBlock* MetaData::GetRemoteDataBlock(DataBlock* db) { return m_remote_block_map[db]; } BPBinary::BinDataBlock* MetaData::GetPreviewDataBlock(DataBlock* db) { return m_prev_block_map[db]; } float MetaData::PowderRequiretment(void) { float powder = 0.0; for (unsigned int i = GetCurrentLayer()->index; i < layers->vector_layers.size(); i++) { bool hasPrintPart = false; MetaData::Layer* layer = layers->vector_layers[i]; for (size_t blockIndex = 0; blockIndex < layer->data_blocks.size(); ++blockIndex) { MetaData::DataBlock* datablock = layer->data_blocks[blockIndex]; if (!datablock)continue; MetaData::Part* part = GetPart(datablock->references->part); if (part) { if (part->print_enable) { hasPrintPart = true; break; } } } if (hasPrintPart) powder += layer->powder; else break; } return powder; } MetaData::Layer* MetaData::GetLayer(unsigned int id) { if (id >= layers->vector_layers.size()) return nullptr; return layers->vector_layers[id]; } unsigned int MetaData::CalcRemainTime(unsigned int index) { m_RemainTime = 0; g_SystemInfo->m_StateBean.remainMil = m_RemainTime; double tTime = 0.0; if (index >= layers->vector_layers.size()) return m_RemainTime; for (size_t layerindex = index; layerindex < layers->vector_layers.size(); layerindex++) { tTime += layers->vector_layers[layerindex]->layer_estimate_time; } if (m_RunCfg->m_PrintRestEnable->GetValue() && m_RunCfg->m_PrintContinueMinute->GetValue() > 0) { double continueFlag = m_RunCfg->m_PrintContinueMinute->GetValue() * 60 * 1000; int pauseCount = tTime / continueFlag; tTime = tTime + pauseCount * m_RunCfg->m_PrintRestMinutes->GetValue() * 60 * 1000; } m_RemainTime = tTime; g_SystemInfo->m_StateBean.remainMil = m_RemainTime; return m_RemainTime; } bool ParamCmp(const MetaData::ParameterSet* lhs, const MetaData::ParameterSet* rhs) { if (lhs->id != rhs->id) return lhs->id < rhs->id; else return lhs->id > rhs->id; } void MetaData::GetErrorInfo(vector& infos) { for (size_t i = 0; i < m_Errors.size(); ++i) { infos.push_back(m_Errors[i]); } } string MetaData::GetErrorInfo() { string result; for (size_t i = 0; i < m_Errors.size(); ++i) { result +=m_Errors[i]+" "; } return result; } MetaData::ParameterSet* MetaData::GetParameterSet(int id) { if (parameterMap.find(id) == parameterMap.end()) { return NULL; } else return parameterMap[id]; } void MetaData::ReCalcEvaTime() { double perLayerpowderTime = 0.0; double coverMil = 0.0, shiftMil = 0.0; m_CoverCfg->Lock(); if (m_CoverCfg->m_CoverDirection == CoverCfg::TWO_WAY1 || m_CoverCfg->m_CoverDirection == CoverCfg::TWO_WAY2) { double coverDis = (double)m_CoverCfg->m_cover_distance; if (m_CoverCfg->m_cover_speed != 0.0) { coverMil = coverDis / m_CoverCfg->m_cover_speed; } } else if (m_CoverCfg->m_CoverDirection == CoverCfg::ONE_WAY || m_CoverCfg->m_CoverDirection == CoverCfg::ONE_WAY2) { if (m_CoverCfg->m_cover_speed != 0.0) { coverMil = (double)m_CoverCfg->m_cover_distance / m_CoverCfg->m_cover_speed; } if (m_CoverCfg->m_cover_shift_speed != 0.0) { shiftMil = (double)m_CoverCfg->m_cover_distance / m_CoverCfg->m_cover_shift_speed; } } m_CoverCfg->UnLock(); perLayerpowderTime = coverMil + shiftMil + 600.0; if (m_ExtCfg->m_AutoCoverSlowWind) { perLayerpowderTime += m_RunCfg->m_CoverWindSimulateTimeOffset->GetValue(); } if (m_RunCfg->m_PrintLayerDelay != 0) { perLayerpowderTime = perLayerpowderTime + m_RunCfg->m_PrintLayerDelay->GetValue() * 1000; } if (m_RunCfg->m_CoverLayerDelay != 0) { perLayerpowderTime = perLayerpowderTime + m_RunCfg->m_CoverLayerDelay->GetValue() * 1000; } double milsec = 0.0; m_RemainTime = 0; if (m_HasOrder && m_MachineCfg->m_MachineType->GetValue() == MachineTypeCfg::HBD_1000) { map* laserCfgsMap = ConfigManager::GetInstance()->GetScannerControlCfg(); for (size_t layerindex = 0; layerindex < layers->vector_layers.size(); ++layerindex) { map areaTime; map borderTime; for (int i = 0; i < 33; i++) { areaTime[i] = 0.0; } MetaData::Layer* layer = layers->vector_layers[layerindex]; for (map::iterator it = layer->estimateTimeMap.begin(); it != layer->estimateTimeMap.end(); it++) { it->second = 0.0; } layer->layer_estimate_time = 0; for (size_t blockIndex = 0; blockIndex < layer->data_blocks.size(); ++blockIndex) { MetaData::DataBlock* datablock = layer->data_blocks[blockIndex]; if (!datablock)continue; MetaData::Part* part = GetPart(datablock->references->part); if (!part)continue; if (!part->print_enable)continue; if (datablock->cno == 0)continue; MetaData::ParameterSet* param = GetParameterSet(datablock->references->process); if (laserCfgsMap->find(datablock->cno) == laserCfgsMap->end())continue; ScannerControlCfg* laserCfg = (*laserCfgsMap)[datablock->cno]; if (!laserCfg)continue; ScanParamCfg* scanParamCfg = laserCfg->GetScanParamCfg(param->set_type); if (scanParamCfg == NULL)scanParamCfg = &laserCfg->m_ScanCfgWrapper.m_ScanParamCfg; SkyWritingCfg* skyWritingCfg = &laserCfg->m_ScanCfgWrapper.m_SkyWritingCfg; double markMil = 0, jumpMil = 0, hatching = 0, jumpdelay = 0, markdelay = 0, sum = 0, flag = 0; if (scanParamCfg->m_jump_speed != 0) { jumpMil = datablock->data_block_summary->jump_distance / scanParamCfg->m_jump_speed * 1000; jumpMil *= 1.03; } if (param->laser_speed != 0) { markMil = datablock->data_block_summary->mark_distance / param->laser_speed * 1000; markMil *= 1.03; } int datatype = BIN_VECTOR; if (m_DataTypeMap.find(param->set_type) != m_DataTypeMap.end()) { datatype = m_DataTypeMap[param->set_type]; } if (skyWritingCfg->m_Mode == 0) { if (datatype == BIN_CHAIN) { markdelay = (double)scanParamCfg->m_polygon_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else if (datatype == BIN_VECTOR) { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } } else { if (param->laser_set->laser_diameter < 100.0f) { double mseg = (double)datablock->data_block_summary->num_mark_segments; hatching = (mseg * (skyWritingCfg->m_Nprev + skyWritingCfg->m_Npost) / 1000.0); } else { if (datatype == BIN_CHAIN) { markdelay = (double)scanParamCfg->m_polygon_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else if (datatype == BIN_VECTOR) { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } } } if (datablock->data_block_summary->num_jump_segments > 0) { float avgL = (float)datablock->data_block_summary->jump_distance / datablock->data_block_summary->num_jump_segments; float judgL = 0.0f; float jump_delay = 0.0f; float min_jump_delay = 0.0f; judgL = (float)scanParamCfg->m_jump_length_limit; jump_delay = (float)scanParamCfg->m_jump_delay; min_jump_delay = (float)scanParamCfg->m_min_jump_delay; //float judgL =(float) scanParamCfg->m_jump_length_limit; if ((avgL < judgL) && (judgL != 0.0f)) { if (jump_delay > min_jump_delay) { float k = (float)(jump_delay - min_jump_delay) / judgL; float avgdl = k * avgL + min_jump_delay; if (avgdl > jump_delay)avgdl = jump_delay; jumpdelay = avgdl * datablock->data_block_summary->num_jump_segments / 1000.0; } else { jumpdelay = (double)min_jump_delay * datablock->data_block_summary->num_jump_segments / 1000.0; } } else { jumpdelay = (double)jump_delay * datablock->data_block_summary->num_jump_segments / 1000.0; } } sum = markMil + jumpMil + hatching + jumpdelay + markdelay + 20.0 + flag; datablock->scanTime = sum; if (datablock->order == 0) { borderTime[datablock->cno] += sum; } areaTime[datablock->order] += sum; } double topLeftSum = 0.0, topRightSum = 0.0, topSum = 0.0; double btnLeftSum = 0.0, btnRightSum = 0.0, btnSum = 0.0; for (int i = 1; i < 9; i++) { topLeftSum += areaTime[i]; } for (int i = 9; i < 17; i++) { topRightSum += areaTime[i]; } for (int i = 17; i < 25; i++) { btnLeftSum += areaTime[i]; } for (int i = 25; i < 33; i++) { btnRightSum += areaTime[i]; } topSum = topLeftSum > topRightSum ? (topLeftSum + topRightSum / 1.3) : (topRightSum + topLeftSum / 1.3); btnSum = btnLeftSum > btnRightSum ? (btnLeftSum + btnRightSum / 1.3) : (btnRightSum + btnLeftSum / 1.3); double borderSum = 0.0; for (map::iterator it = borderTime.begin(); it != borderTime.end(); it++) { if (it->second > borderSum)borderSum = it->second; } double ss = topSum > btnSum ? topSum : btnSum; layer->layer_estimate_time += (ss + perLayerpowderTime); layer->layer_estimate_time += borderSum; milsec += layer->layer_estimate_time; } m_RemainTime = milsec; evaTime = milsec; } else { map* laserCfgsMap = ConfigManager::GetInstance()->GetScannerControlCfg(); for (size_t layerindex = 0; layerindex < layers->vector_layers.size(); ++layerindex) { MetaData::Layer* layer = layers->vector_layers[layerindex]; for (map::iterator it = layer->estimateTimeMap.begin(); it != layer->estimateTimeMap.end(); it++) { it->second = 0.0; } layer->layer_estimate_time = 0; for (size_t blockIndex = 0; blockIndex < layer->data_blocks.size(); ++blockIndex) { //double milsec = 0; MetaData::DataBlock* datablock = layer->data_blocks[blockIndex]; MetaData::ParameterSet* param = parameterMap[datablock->references->process]; if (!param)continue; if (laserCfgsMap->find(datablock->cno) == laserCfgsMap->end())continue; ScannerControlCfg* laserCfg = (*laserCfgsMap)[datablock->cno]; if (!laserCfg)continue; ScanParamCfg* scanParamCfg = laserCfg->GetScanParamCfg(param->set_type); if (scanParamCfg == NULL)scanParamCfg = &laserCfg->m_ScanCfgWrapper.m_ScanParamCfg; SkyWritingCfg* skyWritingCfg = &laserCfg->m_ScanCfgWrapper.m_SkyWritingCfg; double markMil = 0, jumpMil = 0, hatching = 0, jumpdelay = 0, markdelay = 0, sum = 0, flag = 0; if (scanParamCfg->m_jump_speed != 0) { jumpMil = datablock->data_block_summary->jump_distance / scanParamCfg->m_jump_speed * 1000; jumpMil *= 1.03; } if (param->laser_speed != 0) { markMil = datablock->data_block_summary->mark_distance / param->laser_speed * 1000; markMil *= 1.03; } int datatype = BIN_VECTOR; if (m_DataTypeMap.find(param->set_type) != m_DataTypeMap.end()) { datatype = m_DataTypeMap[param->set_type]; } if (skyWritingCfg->m_Mode == 0) { if (datatype == BIN_CHAIN) { markdelay = (double)scanParamCfg->m_polygon_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else if (datatype == BIN_VECTOR) { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } } else { if (param->laser_set->laser_diameter < 100.0f) { double mseg = (double)datablock->data_block_summary->num_mark_segments; hatching = (mseg * (skyWritingCfg->m_Nprev + skyWritingCfg->m_Npost) / 1000.0); } else { if (datatype == BIN_CHAIN) { markdelay = (double)scanParamCfg->m_polygon_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else if (datatype == BIN_VECTOR) { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } else { markdelay = (double)scanParamCfg->m_scan_delay * datablock->data_block_summary->num_mark_segments / 1000.0; } } } if (datablock->data_block_summary->num_jump_segments > 0) { float avgL = (float)datablock->data_block_summary->jump_distance / datablock->data_block_summary->num_jump_segments; float judgL = 0.0f; float jump_delay = 0.0f; float min_jump_delay = 0.0f; judgL = (float)scanParamCfg->m_jump_length_limit; jump_delay = (float)scanParamCfg->m_jump_delay; min_jump_delay = (float)scanParamCfg->m_min_jump_delay; //float judgL =(float) scanParamCfg->m_jump_length_limit; if ((avgL < judgL) && (judgL != 0.0f)) { if (jump_delay > min_jump_delay) { float k = (float)(jump_delay - min_jump_delay) / judgL; float avgdl = k * avgL + min_jump_delay; if (avgdl > jump_delay)avgdl = jump_delay; jumpdelay = avgdl * datablock->data_block_summary->num_jump_segments / 1000.0; } else { jumpdelay = (double)min_jump_delay * datablock->data_block_summary->num_jump_segments / 1000.0; } } else { jumpdelay = (double)jump_delay * datablock->data_block_summary->num_jump_segments / 1000.0; } } sum = markMil + jumpMil + hatching + jumpdelay + markdelay + 20.0 + flag; datablock->scanTime = sum; // milsec += sum; layer->estimateTimeMap[laserCfg->m_SeqNo ] += sum; } double max = 0.0; for (map::iterator it = layer->estimateTimeMap.begin(); it != layer->estimateTimeMap.end(); it++) { double eve = it->second; if (eve > max)max = eve; } double ttemp = 0.0; if (max < (m_RunCfg->m_CoverSimulateTimeOffset->GetValue() + m_CoverCfg->m_SupplyTime)) { ttemp = (m_RunCfg->m_CoverSimulateTimeOffset->GetValue() - max) + m_CoverCfg->m_SupplyTime; max = 0.0; } layer->layer_estimate_time += (max + perLayerpowderTime + ttemp); milsec += layer->layer_estimate_time; } m_RemainTime = milsec; if (m_RunCfg->m_PrintRestEnable->GetValue() && m_RunCfg->m_PrintContinueMinute->GetValue() > 0) { double continueFlag = m_RunCfg->m_PrintContinueMinute->GetValue() * 60 * 1000; int pauseCount = milsec / continueFlag; milsec = milsec + pauseCount * m_RunCfg->m_PrintRestMinutes->GetValue() * 60 * 1000; m_RemainTime = m_RemainTime + pauseCount * m_RunCfg->m_PrintRestMinutes->GetValue() * 60 * 1000; } evaTime = milsec; } g_SystemInfo->m_StateBean.jobCostMil = evaTime; g_SystemInfo->m_StateBean.remainMil = m_RemainTime; } void MetaData::InitTypeMap() { m_DataTypeMap["BlockSupport"] = BIN_CHAIN; m_DataTypeMap["DownBorder"] = BIN_CHAIN; m_DataTypeMap["DownBorderJ"] = BIN_CHAIN; m_DataTypeMap["DownBorderAd"] = BIN_CHAIN; m_DataTypeMap["DownBorderAdJ"] = BIN_CHAIN; m_DataTypeMap["DownFBorder"] = BIN_CHAIN; m_DataTypeMap["DownFBorderJ"] = BIN_CHAIN; m_DataTypeMap["DownHatching"] = BIN_VECTOR; m_DataTypeMap["DownHatching2"] = BIN_VECTOR; m_DataTypeMap["DownHatching3"] = BIN_VECTOR; m_DataTypeMap["DownHatching4"] = BIN_VECTOR; m_DataTypeMap["DownHatching5"] = BIN_VECTOR; m_DataTypeMap["DownThin"] = BIN_CHAIN; m_DataTypeMap["DownThinJ"] = BIN_CHAIN; m_DataTypeMap["Dummy"] = BIN_VECTOR; m_DataTypeMap["InBorder"] = BIN_CHAIN; m_DataTypeMap["InBorderJ"] = BIN_CHAIN; m_DataTypeMap["InBorderAd"] = BIN_CHAIN; m_DataTypeMap["InBorderAdJ"] = BIN_CHAIN; m_DataTypeMap["InFBorder"] = BIN_CHAIN; m_DataTypeMap["InFBorderJ"] = BIN_CHAIN; m_DataTypeMap["InHatching"] = BIN_VECTOR; m_DataTypeMap["InThin"] = BIN_CHAIN; m_DataTypeMap["InThinJ"] = BIN_CHAIN; m_DataTypeMap["Other"] = BIN_VECTOR; m_DataTypeMap["SupportBorder"] = BIN_CHAIN; m_DataTypeMap["SupportBorderAd"] = BIN_CHAIN; m_DataTypeMap["SupportHatching"] = BIN_VECTOR; m_DataTypeMap["UpBorder"] = BIN_CHAIN; m_DataTypeMap["UpBorderJ"] = BIN_CHAIN; m_DataTypeMap["UpBorderAd"] = BIN_CHAIN; m_DataTypeMap["UpBorderAdJ"] = BIN_CHAIN; m_DataTypeMap["UpFBorder"] = BIN_CHAIN; m_DataTypeMap["UpFBorderJ"] = BIN_CHAIN; m_DataTypeMap["UpHatching"] = BIN_VECTOR; m_DataTypeMap["UpHatching2"] = BIN_VECTOR; m_DataTypeMap["UpHatching3"] = BIN_VECTOR; m_DataTypeMap["UpHatching4"] = BIN_VECTOR; m_DataTypeMap["UpHatching5"] = BIN_VECTOR; m_DataTypeMap["UpThin"] = BIN_CHAIN; m_DataTypeMap["UpThinJ"] = BIN_CHAIN; m_DataTypeMap["LatticeHatching"] = BIN_VECTOR; m_DataTypeMap["LatticeBorder"] = BIN_CHAIN; m_DataTypeMap["LatticeBorderJ"] = BIN_CHAIN; m_DataTypeMap["LatticeFBorder"] = BIN_CHAIN; m_DataTypeMap["LatticeFBorderJ"] = BIN_CHAIN; m_DataTypeMap["BorderDown"] = BIN_CHAIN; m_DataTypeMap["FillContourDown"] = BIN_CHAIN; m_DataTypeMap["HatchingDown"] = BIN_VECTOR; m_DataTypeMap["BorderAdditionalDown"] = BIN_CHAIN; m_DataTypeMap["BorderBlockedDown"] = BIN_CHAIN; m_DataTypeMap["Border"] = BIN_CHAIN; m_DataTypeMap["FillContour"] = BIN_CHAIN; m_DataTypeMap["Hatching"] = BIN_VECTOR; m_DataTypeMap["BorderAdditional"] = BIN_CHAIN; m_DataTypeMap["BorderBlocked"] = BIN_CHAIN; m_DataTypeMap["BorderUp"] = BIN_CHAIN; m_DataTypeMap["FillContourUp"] = BIN_CHAIN; m_DataTypeMap["HatchingUp"] = BIN_VECTOR; m_DataTypeMap["BorderAdditionalUp"] = BIN_CHAIN; m_DataTypeMap["BorderBlockedUp"] = BIN_CHAIN; m_DataTypeMap["BorderSupport"] = BIN_CHAIN; m_DataTypeMap["HatchingBorder"] = BIN_VECTOR; m_DataTypeMap["BorderAdditionalSupport"] = BIN_CHAIN; m_DataTypeMap["WallSupport"] = BIN_VECTOR; } void MetaData::ClearBlockMap() { for (map::iterator it = m_block_map.begin(); it != m_block_map.end(); ++it) { delete it->second; } m_block_map.clear(); } void MetaData::ClearPrevBlockMap() { for (map::iterator it = m_prev_block_map.begin(); it != m_prev_block_map.end(); ++it) { delete it->second; } m_prev_block_map.clear(); } void MetaData::ClearRemoteBlockMap() { for (map::iterator it = m_remote_block_map.begin(); it != m_remote_block_map.end(); ++it) { delete it->second; } m_remote_block_map.clear(); } void MetaData::ClearBFileMap() { for (map::iterator it = m_binary_file_map.begin(); it != m_binary_file_map.end(); ++it) { ifstream* pbfile = it->second; if (pbfile) { if (pbfile->is_open())pbfile->close(); delete pbfile; } } m_binary_file_map.clear(); for (map::iterator it = m_pre_file_map.begin(); it != m_pre_file_map.end(); ++it) { ifstream* pbfile = it->second; if (pbfile) { pbfile->close(); delete pbfile; } } m_pre_file_map.clear(); } map MetaData::m_DataTypeMap = map();