/// <summary> /// 加载操作数据 /// </summary> /// <param name="loadData">加载数据</param> /// <returns>是否加载成功</returns> internal bool Load(ref LoadData loadData) { OperationParameter.NodeParser parser = new OperationParameter.NodeParser(this, ref loadData); do { if (parser.Load(ref loadData)) { switch (parser.OperationType) { case OperationParameter.OperationType.LoadArraySize: int size = parser.ReadInt(); if (parser.IsEnd) { Array = new DataStructureItem[size]; isRebuild = true; break; } return(false); case OperationParameter.OperationType.GetOrCreateDataStructure: if (loadDataStructure(loadData.Buffer)) { break; } return(false); case OperationParameter.OperationType.RemoveDataStructure: if (loadRemoveDataStructure(loadData.Buffer)) { break; } return(false); case OperationParameter.OperationType.LoadIndexIdentity: if (loadIndexIdentity(ref parser)) { break; } return(false); default: ServerDataStructure dataStructure = parser.Get(Array); if (dataStructure != null) { dataStructure.Node.Operation(ref parser); } break; } } else { return(false); } }while (loadData.IsNext); return(true); }
/// <summary> /// 加载数据结构索引标识 /// </summary> /// <param name="parser"></param> /// <returns></returns> private bool loadIndexIdentity(ref OperationParameter.NodeParser parser) { if (parser.ReadInt() == Array.Length) { FreeIndexs.PrepLength(Array.Length); ServerDataStructure dataStructure; for (int index = Array.Length; index != 0;) { if (!Array[--index].Load((ulong)parser.ReadLong(), out dataStructure)) { return(false); } if (dataStructure == null) { FreeIndexs.UnsafeAdd(index); } } isRebuild = false; return(true); } return(false); }