void OsmAnd::ObfPoiSectionReader_P::read( const std::unique_ptr<ObfReader_P>& reader, const std::shared_ptr<ObfPoiSectionInfo>& section ) { auto cis = reader->_codedInputStream.get(); for(;;) { auto tag = cis->ReadTag(); switch(gpb::internal::WireFormatLite::GetTagFieldNumber(tag)) { case 0: return; case OBF::OsmAndPoiIndex::kNameFieldNumber: ObfReaderUtilities::readQString(cis, section->_name); break; case OBF::OsmAndPoiIndex::kBoundariesFieldNumber: { gpb::uint32 length; cis->ReadVarint32(&length); auto oldLimit = cis->PushLimit(length); readBoundaries(reader, section); cis->PopLimit(oldLimit); } break; case OBF::OsmAndPoiIndex::kCategoriesTableFieldNumber: cis->Skip(cis->BytesUntilLimit()); return; default: ObfReaderUtilities::skipUnknownField(cis, tag); break; } } }
void OsmAnd::ObfPoiSection::readCategories( ObfReader* reader, ObfPoiSection* section, QList< std::shared_ptr<OsmAnd::Model::Amenity::Category> >& categories ) { auto cis = reader->_codedInputStream.get(); for(;;) { auto tag = cis->ReadTag(); switch(gpb::internal::WireFormatLite::GetTagFieldNumber(tag)) { case 0: return; case OBF::OsmAndPoiIndex::kNameFieldNumber: ObfReader::readQString(cis, section->_name); break; case OBF::OsmAndPoiIndex::kBoundariesFieldNumber: { gpb::uint32 length; cis->ReadVarint32(&length); auto oldLimit = cis->PushLimit(length); readBoundaries(reader, section); cis->PopLimit(oldLimit); } break; case OBF::OsmAndPoiIndex::kCategoriesTableFieldNumber: { gpb::uint32 length; cis->ReadVarint32(&length); auto oldLimit = cis->PushLimit(length); std::shared_ptr<Model::Amenity::Category> category(new Model::Amenity::Category()); readCategory(reader, category.get()); cis->PopLimit(oldLimit); categories.push_back(category); } break; case OBF::OsmAndPoiIndex::kNameIndexFieldNumber: cis->Skip(cis->BytesUntilLimit()); return; default: ObfReader::skipUnknownField(cis, tag); break; } } }
void OsmAnd::ObfPoiSectionReader_P::read( const ObfReader_P& reader, const std::shared_ptr<ObfPoiSectionInfo>& section ) { const auto cis = reader.getCodedInputStream().get(); for(;;) { const auto tag = cis->ReadTag(); switch(gpb::internal::WireFormatLite::GetTagFieldNumber(tag)) { case 0: if (!ObfReaderUtilities::reachedDataEnd(cis)) return; return; case OBF::OsmAndPoiIndex::kNameFieldNumber: ObfReaderUtilities::readQString(cis, section->name); break; case OBF::OsmAndPoiIndex::kBoundariesFieldNumber: { gpb::uint32 length; cis->ReadVarint32(&length); const auto offset = cis->CurrentPosition(); auto oldLimit = cis->PushLimit(length); readBoundaries(reader, section); ObfReaderUtilities::ensureAllDataWasRead(cis); cis->PopLimit(oldLimit); } break; case OBF::OsmAndPoiIndex::kCategoriesTableFieldNumber: cis->Skip(cis->BytesUntilLimit()); return; default: ObfReaderUtilities::skipUnknownField(cis, tag); break; } } }