bool RawNode::Read(const TypeConfig& typeConfig, FileScanner& scanner) { if (!scanner.ReadNumber(id)) { return false; } TypeId typeId; if (!scanner.ReadTypeId(typeId, typeConfig.GetNodeTypeIdBytes())) { return false; } TypeInfoRef type=typeConfig.GetNodeTypeInfo(typeId); featureValueBuffer.SetType(type); if (!type->GetIgnore()) { if (!featureValueBuffer.Read(scanner)) { return false; } } if (!scanner.ReadCoord(coords)) { return false; } return !scanner.HasError(); }
bool Node::Read(const TypeConfig& typeConfig, FileScanner& scanner) { if (!scanner.GetPos(fileOffset)) { return false; } uint32_t tmpType; scanner.ReadNumber(tmpType); TypeInfoRef type=typeConfig.GetTypeInfo((TypeId)tmpType); featureValueBuffer.SetType(type); if (!featureValueBuffer.Read(scanner)) { return false; } scanner.ReadCoord(coords); return !scanner.HasError(); }
/** * Reads the data from the given FileScanner * * @throws IOException */ void RawCoord::Read(const TypeConfig& /*typeConfig*/, FileScanner& scanner) { scanner.ReadNumber(id); scanner.ReadCoord(coord); }
bool RouteNode::Read(FileScanner& scanner) { uint32_t objectCount; uint32_t pathCount; uint32_t excludesCount; if (!scanner.GetPos(fileOffset)) { return false; } scanner.ReadNumber(id); if (!scanner.ReadCoord(coord)) { return false; } scanner.ReadNumber(objectCount); scanner.ReadNumber(pathCount); scanner.ReadNumber(excludesCount); if (scanner.HasError()) { return false; } objects.resize(objectCount); Id previousFileOffset=0; for (size_t i=0; i<objectCount; i++) { RefType type; FileOffset fileOffset; if (!scanner.ReadNumber(fileOffset)) { return false; } if (fileOffset % 2==0) { type=refWay; } else { type=refArea; } fileOffset=fileOffset/2; fileOffset+=previousFileOffset; objects[i].object.Set(fileOffset,type); scanner.ReadNumber(objects[i].type); scanner.Read(objects[i].maxSpeed); scanner.Read(objects[i].grade); previousFileOffset=fileOffset; } if (pathCount>0) { GeoCoord minCoord; paths.resize(pathCount); for (size_t i=0; i<pathCount; i++) { uint32_t distanceValue; scanner.ReadFileOffset(paths[i].offset); scanner.ReadNumber(paths[i].objectIndex); //scanner.Read(paths[i].bearing); scanner.Read(paths[i].flags); scanner.ReadNumber(distanceValue); paths[i].distance=distanceValue/(1000.0*100.0); } } excludes.resize(excludesCount); for (size_t i=0; i<excludesCount; i++) { scanner.Read(excludes[i].source); scanner.ReadNumber(excludes[i].targetIndex); } return !scanner.HasError(); }