/// <summary> /// 写入字节流(简版) /// </summary> protected override void toWriteBytesSimple(BytesWriteStream stream) { stream.writeInt(this.type); stream.writeUTF(this.text); if (this.elements != null) { stream.writeBoolean(true); stream.writeLen(this.elements.size()); if (!this.elements.isEmpty()) { ChatElementData[] elementsVValues = this.elements.getValues(); for (int elementsVI = 0, elementsVLen = this.elements.length(); elementsVI < elementsVLen; ++elementsVI) { ChatElementData elementsV = elementsVValues[elementsVI]; if (elementsV != null) { stream.writeBoolean(true); stream.writeDataSimpleNotNull(elementsV); } else { stream.writeBoolean(false); } } } } else { stream.writeBoolean(false); } }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { ChatElementData mData = (ChatElementData)data; if (this.type != mData.type) { return(false); } return(true); }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if (!(data is ChatElementData)) { return; } ChatElementData mData = (ChatElementData)data; this.type = mData.type; }
/// <summary> /// 转文本输出 /// </summary> protected override void toWriteDataString(DataWriter writer) { writer.writeTabs(); writer.sb.Append("type"); writer.sb.Append(':'); writer.sb.Append(this.type); writer.writeEnter(); writer.writeTabs(); writer.sb.Append("text"); writer.sb.Append(':'); writer.sb.Append(this.text); writer.writeEnter(); writer.writeTabs(); writer.sb.Append("elements"); writer.sb.Append(':'); writer.sb.Append("List<ChatElementData>"); if (this.elements != null) { SList <ChatElementData> elementsT = this.elements; int elementsLen = elementsT.size(); writer.sb.Append('('); writer.sb.Append(elementsLen); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); for (int elementsI = 0; elementsI < elementsLen; ++elementsI) { ChatElementData elementsV = elementsT.get(elementsI); writer.writeTabs(); writer.sb.Append(elementsI); writer.sb.Append(':'); if (elementsV != null) { elementsV.writeDataString(writer); } else { writer.sb.Append("ChatElementData=null"); } writer.writeEnter(); } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if (!(data is ChatData)) { return; } ChatData mData = (ChatData)data; this.type = mData.type; this.text = mData.text; if (mData.elements != null) { if (this.elements != null) { this.elements.clear(); this.elements.ensureCapacity(mData.elements.size()); } else { this.elements = new SList <ChatElementData>(); } SList <ChatElementData> elementsT = this.elements; if (!mData.elements.isEmpty()) { ChatElementData[] elementsVValues = mData.elements.getValues(); for (int elementsVI = 0, elementsVLen = mData.elements.length(); elementsVI < elementsVLen; ++elementsVI) { ChatElementData elementsV = elementsVValues[elementsVI]; ChatElementData elementsU; if (elementsV != null) { elementsU = (ChatElementData)elementsV.clone(); } else { elementsU = null; } elementsT.add(elementsU); } } } else { this.elements = null; } }
/// <summary> /// 读取字节流(完整版) /// </summary> protected override void toReadBytesFull(BytesReadStream stream) { stream.startReadObj(); this.type = stream.readInt(); this.text = stream.readUTF(); if (stream.readBoolean()) { int elementsLen = stream.readLen(); if (this.elements != null) { this.elements.clear(); this.elements.ensureCapacity(elementsLen); } else { this.elements = new SList <ChatElementData>(); } SList <ChatElementData> elementsT = this.elements; for (int elementsI = elementsLen - 1; elementsI >= 0; --elementsI) { ChatElementData elementsV; if (stream.readBoolean()) { BaseData elementsVT = stream.readDataFullNotNull(); if (elementsVT != null) { if (elementsVT is ChatElementData) { elementsV = (ChatElementData)elementsVT; } else { elementsV = new ChatElementData(); if (!(elementsVT.GetType().IsAssignableFrom(typeof(ChatElementData)))) { stream.throwTypeReadError(typeof(ChatElementData), elementsVT.GetType()); } elementsV.shadowCopy(elementsVT); } } else { elementsV = null; } } else { elementsV = null; } elementsT.add(elementsV); } } else { this.elements = null; } stream.endReadObj(); }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { ChatData mData = (ChatData)data; if (this.type != mData.type) { return(false); } if (this.text != mData.text) { return(false); } if (mData.elements != null) { if (this.elements == null) { return(false); } if (this.elements.size() != mData.elements.size()) { return(false); } SList <ChatElementData> elementsT = this.elements; SList <ChatElementData> elementsR = mData.elements; int elementsLen = elementsT.size(); for (int elementsI = 0; elementsI < elementsLen; ++elementsI) { ChatElementData elementsU = elementsT.get(elementsI); ChatElementData elementsV = elementsR.get(elementsI); if (elementsV != null) { if (elementsU == null) { return(false); } if (!elementsU.dataEquals(elementsV)) { return(false); } } else { if (elementsU != null) { return(false); } } } } else { if (this.elements != null) { return(false); } } return(true); }