virtual public void AddMember(BuilderObjectBase _object) { if (Members == null) { Members = new Dictionary <int, BuilderObjectBase>(); } if (!Members.ContainsKey(_object.FieldNumber)) { Members.Add(_object.FieldNumber, _object); _object.BuildParent = this; } else { throw new InvalidOperationException("重复设置member 字段:" + _object.FieldNumber); } }
override public void ReadMember(ProtobufferReaderCSLS _reader) { BuilderObjectBase tchild = null; if (mCodeTool.IsLSType(mChildType.TypeForCLR)) { tchild = new BuilderObjectCELSClass(mCodeTool, mIndex, 0, null, mChildType, null); } else { tchild = new BuilderObjectDefault(mCodeTool, mIndex, 0, null, mChildType, null); } AddMember(tchild); tchild.ReadMember(_reader); object tmet = mCodeTool.GetLMethod(mFunType, "Add", 1); mCodeTool.CallMethod(tmet, mSelfObject, tchild.Value); mIndex++; }
override public void ReadMember(ProtobufferReaderCSLS _reader) { int bytes = (int)_reader.ReadUInt32Variant(false); byte[] tbytearry = _reader.ReadBytes(bytes); if (tbytearry != null) { ProtobufferReaderCSLS treader = new ProtobufferReaderCSLS(tbytearry, bytes); int tfieldnumber = treader.ReadFieldHeader(); while (tfieldnumber > 0) { if (!Members.ContainsKey(tfieldnumber)) { throw new InvalidOperationException("ProtoReaderMemberObject 未能从builder中找到对应的字段 fieldnumber:" + tfieldnumber); } BuilderObjectBase tprb = Members[tfieldnumber]; tprb.ReadMember(treader); tfieldnumber = treader.ReadFieldHeader(); } } }
public BuilderObjectCELSClass(CodeToolBase _codetool, int _fieldnumber, int _fieldindex, object _parent, IType _type, IType _parenttype) : base(_codetool, _fieldnumber, _fieldindex, _parent, _type, _parenttype) { mSelfObject = mCodeTool.GetCSLEObjectParmasByType(mFunType); if (mSelfObject == null) { throw new InvalidOperationException("未能取得对象 " + ":" + mFunType.TypeForCLR.Name); } if (mParentType != null && mParentObject != null) { mCodeTool.SetMember(mParentType, mFieldIndex, mSelfObject, mParentObject); } IType[] ttypes = mCodeTool.GetFieldTypes(mFunType); int tindex = 1; for (int i = 0; i < ttypes.Length; i++) { BuilderObjectBase tobj = BuilderObjectBase.GetMember(_codetool, ttypes[i], i, tindex++, mSelfObject, mFunType); AddMember(tobj); } }
private void BuildMember() { IType[] ttypes = mCodeTool.GetFieldTypes(mScriptType); int tindex = 1; for (int i = 0; i < ttypes.Length; i++) { BuilderObjectBase tobj = BuilderObjectBase.GetMember(mCodeTool, ttypes[i], i, tindex++, mScriptObject, mScriptType); AddMember(tobj); } int tfieldnumber = mReader.ReadFieldHeader(); while (tfieldnumber > 0) { if (!Members.ContainsKey(tfieldnumber)) { throw new InvalidOperationException("ProtoReaderMemberObject 未能从builder中找到对应的字段 fieldnumber:" + tfieldnumber); } BuilderObjectBase tprb = Members[tfieldnumber]; tprb.ReadMember(mReader); tfieldnumber = mReader.ReadFieldHeader(); } }
override public void AddMember(BuilderObjectBase _object) { }