public Object read(Buffer buf) { HeaderInfo info = parseHeader(buf); Object obj = null; switch (info.type) { case TYPE_INTEGER: obj = New.i8((byte) info.value); break; case TYPE_I8: obj = New.i8(buf.readI8()); break; case TYPE_I16: obj = New.i16(buf.readI16()); break; case TYPE_I32: obj = New.i32(buf.readI32()); break; case TYPE_I64: obj = New.i64(buf.readI64()); break; case TYPE_F32: obj = New.f32(buf.readF32()); break; case TYPE_F64: obj = New.f64(buf.readF64()); break; case TYPE_STRING: obj = readString(buf, info.length); break; case TYPE_TRUE: obj = New.bool(true); break; case TYPE_FALSE: obj = New.bool(false); break; case TYPE_NULL: obj = null; break; case TYPE_LIST: obj = readList(buf, info.length); break; case TYPE_MAP: obj = readMap(buf, info.length); break; default: if (W) Log.warn("read variant: unknown type, returning null."); obj = null; } New.release(info); return obj; }
public void scan(Buffer buf) { HeaderInfo info = parseHeader(buf); int len = info.length; switch (info.type) { case TYPE_LIST: while (len-- > 0) { scan(buf); } break; case TYPE_MAP: while (len-- > 0) { scan(buf); // scan key scan(buf); // scan value } break; default: buf.drop(info.length); break; } New.release(info); }