MCPcopy Create free account
hub / github.com/bytedance/Fastbot_Android / ParseFlexBufferValue

Method ParseFlexBufferValue

native/thirdpart/flatbuffers/idl_parser.cpp:3039–3115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3037}
3038
3039CheckedError Parser::ParseFlexBufferValue(flexbuffers::Builder *builder) {
3040 ParseDepthGuard depth_guard(this);
3041 ECHECK(depth_guard.Check());
3042
3043 switch (token_) {
3044 case '{': {
3045 auto start = builder->StartMap();
3046 size_t fieldn_outer = 0;
3047 auto err =
3048 ParseTableDelimiters(fieldn_outer, nullptr,
3049 [&](const std::string &name, size_t &fieldn,
3050 const StructDef *) -> CheckedError {
3051 builder->Key(name);
3052 ECHECK(ParseFlexBufferValue(builder));
3053 fieldn++;
3054 return NoError();
3055 });
3056 ECHECK(err);
3057 builder->EndMap(start);
3058 if (builder->HasDuplicateKeys())
3059 return Error("FlexBuffers map has duplicate keys");
3060 break;
3061 }
3062 case '[': {
3063 auto start = builder->StartVector();
3064 uoffset_t count = 0;
3065 ECHECK(ParseVectorDelimiters(count, [&](uoffset_t &) -> CheckedError {
3066 return ParseFlexBufferValue(builder);
3067 }));
3068 builder->EndVector(start, false, false);
3069 break;
3070 }
3071 case kTokenStringConstant:
3072 builder->String(attribute_);
3073 EXPECT(kTokenStringConstant);
3074 break;
3075 case kTokenIntegerConstant:
3076 builder->Int(StringToInt(attribute_.c_str()));
3077 EXPECT(kTokenIntegerConstant);
3078 break;
3079 case kTokenFloatConstant: {
3080 double d;
3081 StringToNumber(attribute_.c_str(), &d);
3082 builder->Double(d);
3083 EXPECT(kTokenFloatConstant);
3084 break;
3085 }
3086 case '-':
3087 case '+': {
3088 // `[-+]?(nan|inf|infinity)`, see ParseSingleValue().
3089 const auto sign = static_cast<char>(token_);
3090 NEXT();
3091 if (token_ != kTokenIdentifier)
3092 return Error("floating-point constant expected");
3093 attribute_.insert(0, 1, sign);
3094 ECHECK(ParseFlexBufferNumericConstant(builder));
3095 NEXT();
3096 break;

Callers

nothing calls this directly

Calls 12

NoErrorFunction · 0.85
ErrorFunction · 0.85
StringToIntFunction · 0.85
StringToNumberFunction · 0.85
CheckMethod · 0.45
StartVectorMethod · 0.45
EndVectorMethod · 0.45
StringMethod · 0.45
IntMethod · 0.45
c_strMethod · 0.45
DoubleMethod · 0.45
BoolMethod · 0.45

Tested by

no test coverage detected