mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-28 15:10:02 +00:00
Update idl_gen_general.cpp
This commit is contained in:
@@ -669,55 +669,43 @@ void GenStructBody(const StructDef &struct_def, std::string *code_ptr, const cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IncChar(std::string &str) {
|
std::string GenOffsetGetter(flatbuffers::FieldDef *key_field, const char &num) {
|
||||||
static int index = -1, num = 1;
|
return "__offset(" +
|
||||||
if (index < 0) {
|
NumToString(key_field->value.offset) + ", o" + num +
|
||||||
for (size_t i = 0; i < str.length(); i++) {
|
(lang_.language == IDLOptions::kCSharp ?
|
||||||
if (str[i] == '!') {
|
".Value, builder.DataBuffer)" : ", _bb)");
|
||||||
index = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
str[index] = (char)(num + '0');
|
|
||||||
num++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GenKeyGetter(flatbuffers::FieldDef *key_field) {
|
std::string GenKeyGetter(flatbuffers::FieldDef *key_field) {
|
||||||
auto data_buffer = (lang_.language == IDLOptions::kCSharp) ?
|
auto data_buffer = (lang_.language == IDLOptions::kCSharp) ?
|
||||||
"builder.DataBuffer" : "_bb";
|
"builder.DataBuffer" : "_bb";
|
||||||
auto get_offset = "__offset(" +
|
|
||||||
NumToString(key_field->value.offset) + ", o!" +
|
|
||||||
(lang_.language == IDLOptions::kCSharp ? ".Value" : "") +
|
|
||||||
", " + data_buffer + ")";
|
|
||||||
|
|
||||||
std::string key_getter = "";
|
std::string key_getter = "";
|
||||||
if (key_field->value.type.base_type == BASE_TYPE_STRING) {
|
if (key_field->value.type.base_type == BASE_TYPE_STRING) {
|
||||||
if (lang_.language == IDLOptions::kJava)
|
if (lang_.language == IDLOptions::kJava)
|
||||||
key_getter += " return ";
|
key_getter += " return ";
|
||||||
key_getter += FunctionStart('C') + "ompareStrings(";
|
key_getter += FunctionStart('C') + "ompareStrings(";
|
||||||
IncChar(get_offset);
|
key_getter += GenOffsetGetter(key_field, '1') + ", ";
|
||||||
key_getter += get_offset + ", ";
|
key_getter += GenOffsetGetter(key_field, '2') + ", " + data_buffer + ")";
|
||||||
IncChar(get_offset);
|
|
||||||
key_getter += get_offset + ", " + data_buffer + ")";
|
|
||||||
if (lang_.language == IDLOptions::kJava)
|
if (lang_.language == IDLOptions::kJava)
|
||||||
key_getter += ";";
|
key_getter += ";";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
auto field_getter = data_buffer + GenGetter(key_field->value.type).substr(2) +
|
auto field_getter = data_buffer + GenGetter(key_field->value.type).substr(2) +
|
||||||
"(" + get_offset + ")";
|
"(" + GenOffsetGetter(key_field, '1') + ")";
|
||||||
IncChar(field_getter);
|
|
||||||
if (lang_.language == IDLOptions::kCSharp) {
|
if (lang_.language == IDLOptions::kCSharp) {
|
||||||
key_getter += field_getter;
|
key_getter += field_getter;
|
||||||
IncChar(field_getter);
|
field_getter = data_buffer + GenGetter(key_field->value.type).substr(2) +
|
||||||
|
"(" + GenOffsetGetter(key_field, '2') + ")";
|
||||||
key_getter += ".CompareTo(" + field_getter + ")";
|
key_getter += ".CompareTo(" + field_getter + ")";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
key_getter += "\n " + GenTypeGet(key_field->value.type) + " off1 = ";
|
key_getter += "\n " + GenTypeGet(key_field->value.type) + " off1 = ";
|
||||||
key_getter += field_getter + ";\n " + GenTypeGet(key_field->value.type);
|
key_getter += field_getter + ";\n " + GenTypeGet(key_field->value.type);
|
||||||
key_getter += " off2 = ";
|
key_getter += " off2 = ";
|
||||||
IncChar(field_getter);
|
field_getter = data_buffer + GenGetter(key_field->value.type).substr(2) +
|
||||||
|
"(" + GenOffsetGetter(key_field, '2') + ")";
|
||||||
key_getter += field_getter + ";\n";
|
key_getter += field_getter + ";\n";
|
||||||
|
key_getter += " return off1 > off2 ? 1 : off1 < off2 ? -1 : 0;\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return key_getter;
|
return key_getter;
|
||||||
|
|||||||
Reference in New Issue
Block a user