void CodeWriter::operator+=(std::string text) { while (true) { auto begin = text.find("{{"); if (begin == std::string::npos) { break; } auto end = text.find("}}"); if (end == std::string::npos || end < begin) { break; } // Write all the text before the first {{ into the stream. stream_.write(text.c_str(), begin); // The key is between the {{ and }}. const std::string key = text.substr(begin + 2, end - begin - 2); // Find the value associated with the key. If it exists, write the // value into the stream, otherwise write the key itself into the stream. auto iter = value_map_.find(key); if (iter != value_map_.end()) { const std::string &value = iter->second; stream_ << value; } else { FLATBUFFERS_ASSERT(false && "could not find key"); stream_ << key; } // Update the text to everything after the }}. text = text.substr(end + 2); } if (!text.empty() && string_back(text) == '\\') { text.pop_back(); stream_ << text; } else { stream_ << text << std::endl; } }
std::string FloatConstantGenerator::GenFloatConstant( const FieldDef &field) const { switch (field.value.type.base_type) { case BASE_TYPE_FLOAT: return GenFloatConstantImpl<float>(field); case BASE_TYPE_DOUBLE: return GenFloatConstantImpl<double>(field); default: { FLATBUFFERS_ASSERT(false); return "INVALID_BASE_TYPE"; } }; }
std::string FloatConstantGenerator::GenFloatConstantImpl( const FieldDef &field) const { const auto &constant = field.value.constant; T v; auto done = StringToNumber(constant.c_str(), &v); FLATBUFFERS_ASSERT(done); if (done) { #if (!defined(_MSC_VER) || (_MSC_VER >= 1800)) if (std::isnan(v)) return NaN(v); if (std::isinf(v)) return Inf(v); #endif return Value(v, constant); } return "#"; // compile time error }
bool FileExists(const char *name) { FLATBUFFERS_ASSERT(g_file_exists_function); return g_file_exists_function(name); }
bool LoadFile(const char *name, bool binary, std::string *buf) { FLATBUFFERS_ASSERT(g_load_file_function); return g_load_file_function(name, binary, buf); }