diff --git a/include/flatbuffers/idl.h b/include/flatbuffers/idl.h index 359cc6801..729917a8b 100644 --- a/include/flatbuffers/idl.h +++ b/include/flatbuffers/idl.h @@ -231,6 +231,15 @@ struct Namespace { size_t from_table; // Part of the namespace corresponds to a message/table. }; +inline bool operator<(const Namespace &a, const Namespace &b) { + size_t min_size = std::min(a.components.size(), b.components.size()); + for (size_t i = 0; i < min_size; ++i) { + if (a.components[i] != b.components[i]) + return a.components[i] < b.components[i]; + } + return a.components.size() < b.components.size(); +} + // Base class for all definition types (fields, structs_, enums_). struct Definition { Definition() diff --git a/src/idl_gen_go.cpp b/src/idl_gen_go.cpp index f6119cb3f..8efbdc8d3 100644 --- a/src/idl_gen_go.cpp +++ b/src/idl_gen_go.cpp @@ -113,7 +113,13 @@ class GoGenerator : public BaseGenerator { private: Namespace go_namespace_; Namespace *cur_name_space_; - std::set tracked_imported_namespaces_; + + struct NamespacePtrLess { + bool operator()(const Namespace *a, const Namespace *b) const { + return *a < *b; + } + }; + std::set tracked_imported_namespaces_; // Most field accessors need to retrieve and test the field offset first, // this is the prefix code for that.