/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
library/cpp/protobuf/util/iterators.h
53 строки
1 KB
qkrorlqr
Initial NBS OpenSource export
28 апр 2023, 21:54
28 апр 2023, 21:54
783a858
Код
Авторство
О чём код?
#pragma once #include <google/protobuf/descriptor.h> namespace NProtoBuf { class TFieldsIterator { public: explicit TFieldsIterator(const NProtoBuf::Descriptor* descriptor, int position = 0) : Descriptor(descriptor) , Position(position) { } TFieldsIterator& operator++() { ++Position; return *this; } TFieldsIterator& operator++(int) { auto& ret = *this; ++*this; return ret; } const NProtoBuf::FieldDescriptor* operator*() const { return Descriptor->field(Position); } bool operator== (const TFieldsIterator& other) const { return Position == other.Position && Descriptor == other.Descriptor; } bool operator!= (const TFieldsIterator& other) const { return !(*this == other); } private: const NProtoBuf::Descriptor* Descriptor = nullptr; int Position = 0; }; } // Namespaces required by `range-based for` ADL: namespace google { namespace protobuf { NProtoBuf::TFieldsIterator begin(const NProtoBuf::Descriptor& descriptor) { return NProtoBuf::TFieldsIterator(&descriptor); } NProtoBuf::TFieldsIterator end(const NProtoBuf::Descriptor& descriptor) { return NProtoBuf::TFieldsIterator(&descriptor, descriptor.field_count()); } } }