CppUsage: address requested changes.
idl_gen_cpp.cpp: fix formatting, keep CreateVectorOfStrings for normal string cases.
This commit is contained in:
parent
371d4e0b79
commit
2f0402f9ff
|
@ -270,8 +270,8 @@ custom string types; the `--cpp-str-flex-ctor` argument to `flatc` or the
|
|||
per field attribute `cpp_str_flex_ctor` can be used to change this behavior,
|
||||
so that the custom string type is constructed by passing the pointer and
|
||||
length of the FlatBuffers String. The custom string class will require a
|
||||
constructor in the following format: custom_str_class(const char *, uint32_t).
|
||||
Please note that the character array is not guaranteed to be NUL terminated,
|
||||
constructor in the following format: custom_str_class(const char *, size_t).
|
||||
Please note that the character array is not guaranteed to be NULL terminated,
|
||||
you should always use the provided size to determine end of string.
|
||||
|
||||
## Reflection (& Resizing)
|
||||
|
|
|
@ -496,13 +496,13 @@ class CppGenerator : public BaseGenerator {
|
|||
// Return a C++ type from the table in idl.h
|
||||
std::string GenTypeBasic(const Type &type, bool user_facing_type) const {
|
||||
static const char *const ctypename[] = {
|
||||
// clang-format off
|
||||
// clang-format off
|
||||
#define FLATBUFFERS_TD(ENUM, IDLTYPE, CTYPE, JTYPE, GTYPE, NTYPE, PTYPE, \
|
||||
RTYPE) \
|
||||
#CTYPE,
|
||||
FLATBUFFERS_GEN_TYPES(FLATBUFFERS_TD)
|
||||
#undef FLATBUFFERS_TD
|
||||
// clang-format on
|
||||
// clang-format on
|
||||
};
|
||||
if (user_facing_type) {
|
||||
if (type.enum_def) return WrapInNameSpace(*type.enum_def);
|
||||
|
@ -581,7 +581,7 @@ class CppGenerator : public BaseGenerator {
|
|||
bool FlexibleStringConstructor(const FieldDef *field) {
|
||||
auto attr = field ? (field->attributes.Lookup("cpp_str_flex_ctor") != nullptr) : false;
|
||||
auto ret = attr ? attr : parser_.opts.cpp_object_api_string_flexible_constructor;
|
||||
return (ret && NativeString(field) != "std::string"); // Only for custom string types.
|
||||
return ret && NativeString(field) != "std::string"; // Only for custom string types.
|
||||
}
|
||||
|
||||
std::string GenTypeNativePtr(const std::string &type, const FieldDef *field,
|
||||
|
@ -2341,13 +2341,17 @@ class CppGenerator : public BaseGenerator {
|
|||
auto vector_type = field.value.type.VectorType();
|
||||
switch (vector_type.base_type) {
|
||||
case BASE_TYPE_STRING: {
|
||||
// Use by-function serialization to emulate CreateVectorOfStrings();
|
||||
// this works also with non-std strings.
|
||||
code += "_fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>> ";
|
||||
code += "(" + value + ".size(), ";
|
||||
code += "[](size_t i, _VectorArgs *__va) { ";
|
||||
code += "return __va->__fbb->CreateString(__va->_" + value + "[i]);";
|
||||
code += " }, &_va )";
|
||||
if (NativeString(&field) == "std::string") {
|
||||
code += "_fbb.CreateVectorOfStrings(" + value + ")";
|
||||
} else {
|
||||
// Use by-function serialization to emulate CreateVectorOfStrings();
|
||||
// this works also with non-std strings.
|
||||
code += "_fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>> ";
|
||||
code += "(" + value + ".size(), ";
|
||||
code += "[](size_t i, _VectorArgs *__va) { ";
|
||||
code += "return __va->__fbb->CreateString(__va->_" + value + "[i]);";
|
||||
code += " }, &_va )";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BASE_TYPE_STRUCT: {
|
||||
|
|
Loading…
Reference in New Issue