public TarsStructBase DirectRead(TarsStructBase o, int tag, bool isRequire) { TarsStructBase reff = null; if (SkipToTag(tag)) { try { reff = o.NewInit(); } catch (Exception e) { throw new TarsDecodeException(e.Message); } var hd = new HeadData(); ReadHead(hd); if (hd.Type != TarsStructBase.STRUCT_BEGIN) { throw new TarsDecodeException("type mismatch."); } reff.ReadFrom(this); SkipToStructEnd(); } else if (isRequire) { throw new TarsDecodeException("require field not exist."); } return(reff); }
public TarsStructBase ReadTarsStructBase(Type type, int tag, bool isRequire) { TarsStructBase reff = null; if (SkipToTag(tag)) { try { reff = (TarsStructBase)Activator.CreateInstance(type); } catch (Exception e) { throw new TarsDecodeException(e.Message); } var hd = new HeadData(); ReadHead(hd); if (hd.Type != TarsStructBase.STRUCT_BEGIN) { throw new TarsDecodeException("type mismatch."); } reff.ReadFrom(this); SkipToStructEnd(); } else if (isRequire) { throw new TarsDecodeException("require field not exist."); } return(reff); }
private TarsStructBase[] ReadTarsStructBaseArray(Type elementType, int tag, bool isRequire) { TarsStructBase[] lr = null; if (SkipToTag(tag)) { var hd = new HeadData(); ReadHead(hd); switch (hd.Type) { case TarsStructBase.LIST: { int size = ReadInt(0, true); if (size < 0) { throw new TarsDecodeException("size invalid: " + size); } lr = new TarsStructBase[size]; for (int i = 0; i < size; ++i) { lr[i] = ReadTarsStructBase(elementType, 0, true); } break; } default: throw new TarsDecodeException("type mismatch."); } } else if (isRequire) { throw new TarsDecodeException("require field not exist."); } return(lr); }
public void Write(TarsStructBase o, int tag) { Reserve(2); WriteHead(TarsStructBase.STRUCT_BEGIN, tag); o.WriteTo(this); Reserve(2); WriteHead(TarsStructBase.STRUCT_END, 0); }