///////// // SHPFile SHPFile::SHPFile(InStream &src) { mHeader = 0; Record *record = 0; try { mHeader = new FileHeader(src); while(!src.EndOfData()) { RecordHeader recordHeader(src); switch(recordHeader.mShapeType) { case ShapeTypeNull: assert(!"not implemented yet"); break; case ShapeTypePoint: assert(!"not implemented yet"); break; case ShapeTypePolyline: assert(!"not implemented yet"); break; case ShapeTypePolygon: record = new PolygonRecord(src); break; case ShapeTypeMultiPoint: assert(!"not implemented yet"); break; case ShapeTypePointZ: assert(!"not implemented yet"); break; case ShapeTypePolyLineZ: assert(!"not implemented yet"); break; case ShapeTypePolygonZ: assert(!"not implemented yet"); break; case ShapeTypeMultiPointZ: assert(!"not implemented yet"); break; case ShapeTypePointM: assert(!"not implemented yet"); break; case ShapeTypePolyLineM: assert(!"not implemented yet"); break; case ShapeTypePolygonM: assert(!"not implemented yet"); break; case ShapeTypeMultiPointM: assert(!"not implemented yet"); break; case ShapeTypeMultiPatch: assert(!"not implemented yet"); break; default: assert(!"invalid shape type"); break; } mRecords.push_back(record); record = 0; } } catch(...) { delete mHeader; for(Record *rec : mRecords) rec->Unref(); if(record) record->Unref(); throw; } }