- Value *parse_value(void) {
- int c;
- c = read_byte();
- switch(c) {
- case Trace::TYPE_NULL:
- return new Null;
- case Trace::TYPE_FALSE:
- return new Bool(false);
- case Trace::TYPE_TRUE:
- return new Bool(true);
- case Trace::TYPE_SINT:
- return parse_sint();
- case Trace::TYPE_UINT:
- return parse_uint();
- case Trace::TYPE_FLOAT:
- return parse_float();
- case Trace::TYPE_DOUBLE:
- return parse_double();
- case Trace::TYPE_STRING:
- return parse_string();
- case Trace::TYPE_ENUM:
- return parse_enum();
- case Trace::TYPE_BITMASK:
- return parse_bitmask();
- case Trace::TYPE_ARRAY:
- return parse_array();
- case Trace::TYPE_STRUCT:
- return parse_struct();
- case Trace::TYPE_BLOB:
- return parse_blob();
- case Trace::TYPE_OPAQUE:
- return parse_opaque();
- default:
- std::cerr << "error: unknown type " << c << "\n";
- assert(0);
- return NULL;
- }
- }