Make flatbuffer builder deterministic (#6993)

This commit is contained in:
Danila Kutenin
2022-01-14 23:37:27 +00:00
committed by GitHub
parent a42e898979
commit d7b75417fc

View File

@@ -922,7 +922,7 @@ class FlatBufferBuilder {
/// where the vector is stored. /// where the vector is stored.
template<typename T> template<typename T>
Offset<Vector<const T *>> CreateVectorOfSortedStructs(T *v, size_t len) { Offset<Vector<const T *>> CreateVectorOfSortedStructs(T *v, size_t len) {
std::sort(v, v + len, StructKeyComparator<T>()); std::stable_sort(v, v + len, StructKeyComparator<T>());
return CreateVectorOfStructs(v, len); return CreateVectorOfStructs(v, len);
} }
@@ -941,7 +941,7 @@ class FlatBufferBuilder {
extern T Pack(const S &); extern T Pack(const S &);
auto structs = StartVectorOfStructs<T>(len); auto structs = StartVectorOfStructs<T>(len);
for (size_t i = 0; i < len; i++) { structs[i] = Pack(v[i]); } for (size_t i = 0; i < len; i++) { structs[i] = Pack(v[i]); }
std::sort(structs, structs + len, StructKeyComparator<T>()); std::stable_sort(structs, structs + len, StructKeyComparator<T>());
return EndVectorOfStructs<T>(len); return EndVectorOfStructs<T>(len);
} }
@@ -973,7 +973,7 @@ class FlatBufferBuilder {
template<typename T> template<typename T>
Offset<Vector<Offset<T>>> CreateVectorOfSortedTables(Offset<T> *v, Offset<Vector<Offset<T>>> CreateVectorOfSortedTables(Offset<T> *v,
size_t len) { size_t len) {
std::sort(v, v + len, TableKeyComparator<T>(buf_)); std::stable_sort(v, v + len, TableKeyComparator<T>(buf_));
return CreateVector(v, len); return CreateVector(v, len);
} }