public IOperationCollection Read(BinaryReader reader) { int count = reader.ReadInt32(); bool isAllMonotoneAndPoint = reader.ReadBoolean(); var operations = Locator.CreateOperationCollection(count); for (int i = 0; i < count; i++) { int operationCode = reader.ReadInt32(); IOperation operation; //operation body switch (operationCode) { case OperationCode.REPLACE: operation = ReadReplaceOperation(reader); break; case OperationCode.DELETE: operation = ReadDeleteOperation(reader); break; case OperationCode.DELETE_RANGE: operation = ReadDeleteRangeOperation(reader); break; case OperationCode.INSERT_OR_IGNORE: operation = ReadInsertOrIgnoreOperation(reader); break; case OperationCode.READ: operation = ReadReadOperation(reader); break; case OperationCode.READ_RANGE: operation = ReadReadRangeOperation(reader); break; case OperationCode.CLEAR: operation = ReadClearOperation(reader); break; case OperationCode.REFRESH: operation = ReadRefreshOperation(reader); break; case OperationCode.REFRESH_POINT: operation = ReadRefreshPointOperation(reader); break; case OperationCode.REFRESH_RANGE: operation = ReadRefreshRangeOperation(reader); break; case OperationCode.TRY_GET: operation = ReadTryGetOperation(reader); break; case OperationCode.FORWARD: operation = ReadForwardOperation(reader); break; case OperationCode.BACKWARD: operation = ReadBackwardOperation(reader); break; case OperationCode.FIND_NEXT: operation = ReadFindNextOperation(reader); break; case OperationCode.FIND_AFTER: operation = ReadFindAfterOperation(reader); break; case OperationCode.FIND_PREV: operation = ReadFindPrevOperation(reader); break; case OperationCode.FIND_BEFORE: operation = ReadFindBeforeOperation(reader); break; case OperationCode.FIRST_ROW: operation = ReadFirstRowOperation(reader); break; case OperationCode.LAST_ROW: operation = ReadLastRowOperation(reader); break; case OperationCode.COUNT: operation = ReadCountOperation(reader); break; case OperationCode.STORAGE_ENGINE_COMMIT: operation = ReadStorageEngineCommitOperation(reader); break; default: throw new NotImplementedException(); } operations.Add(operation); } return(operations); }