• Wouter van Oortmerssen's avatar
    Add CodeWriter utility class. · 7b94eab2
    Wouter van Oortmerssen authored
    Helps simplify code generation code.  Instead of this:
      code += "inline const " + cpp_qualified_name + " *Get";
      code += name;
      code += "(const void *buf) {\n  return flatbuffers::GetRoot<";
      code += cpp_qualified_name + ">(buf);\n}\n\n";
    
    You do this:
      code.SetValue("NAME", struct_def.name);
      code.SetValue("CPP_NAME", cpp_qualified_name);
      code += "inline const {{CPP_NAME}} *Get{{NAME}}(const void *buf) {";
      code += "  return flatbuffers::GetRoot<{{CPP_NAME}}>(buf);";
      code += "}";
      code += "";
    
    Updated the CPP code generator to use the CodeWriter class.  Most of the
    changes in the generated code are white-space changes, esp. around new
    lines (since the code generator class automatically appends new lines
    when appending a string).  Actual code changes include:
    
    * Renamed "rehasher" to "_rehasher" for consistency with other args in
      Pack function.
    
    * Renamed "union_obj" to "obj: in UnPack function.
    
    * Always do "(void)_o;" to prevent unused variable warning in Create
      function (instead of only doing it if there are no fields) in order
      to avoid two-passes.
    
    * Renamed padding variables from __paddingX to paddingX__.
      "Each name that contains a double underscore (_ _) [...] is reserved
       to the implementation for any use."  C++ standards 17.4.3.1.2.
    
    * Add braces around switch cases.
    
    * Calculate index as a separate statement in EnumName function, eg.
        const size_t index = ...;
        return EnumNamesX()[index];
      vs.
        return EnumNamesX()[...];
    
    * Stored end table offset in variable in Finish() functions, eg.
        const auto end = fbb_.EndTable(start_, ...);
        auto o = flatbuffers::Offset<T>(end);
      vs.
        auto o = flatbuffers::Offset<T>(fbb_.EndTable(start, ...));
    
    * Separate reinterpret_cast calls from function calls in Union
      functions, eg.
        auto ptr = reinterpret_cast<const T *>(obj);
        return ptr->UnPack(resolver);
      vs.
        return reinterpret_cast<const T *>(obj)->UnPack(resolver);
    
    * Removed unecessary (void)(padding__X) no-ops from constructors, eg.
        Test(int16_t a, int8_t b) : ... {
          (void)__padding0;  // <-- Removed this line.
        }
    
    In the idl_gen_cpp.cpp file itself, I refactored some code generation into
    new functions: GenParam, GenNativeTable, GenVerifyCall, GenBuilders,
    GenUnpackFieldStatement, and GenCreateParam.
    
    Change-Id: I727b1bd8719d05b7ce33cbce00eb58fda817b25d
    7b94eab2
Name
Last commit
Last update
CMake Loading commit data...
android Loading commit data...
biicode Loading commit data...
docs Loading commit data...
go Loading commit data...
grpc Loading commit data...
include/flatbuffers Loading commit data...
java/com/google/flatbuffers Loading commit data...
js Loading commit data...
net/FlatBuffers Loading commit data...
php Loading commit data...
python Loading commit data...
reflection Loading commit data...
samples Loading commit data...
src Loading commit data...
tests Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
CMakeLists.txt Loading commit data...
CONTRIBUTING.md Loading commit data...
ISSUE_TEMPLATE.md Loading commit data...
LICENSE.txt Loading commit data...
appveyor.yml Loading commit data...
biicode.conf Loading commit data...
composer.json Loading commit data...
pom.xml Loading commit data...
readme.md Loading commit data...