/// <summary> /// </summary> /// <param name="NeededBlocks"></param> /// <returns></returns> public bool HasAnyBlocksNeeded(BlockListState NeededBlocks) { foreach (ManifestBlockListState NeededState in NeededBlocks.States) { if (NeededState.IsActive) { ManifestBlockListState OurState = GetStateById(NeededState.Id); if (OurState != null) { foreach (SparseStateArray.Range NeededRange in NeededState.BlockState.Ranges) { if (!NeededRange.State) { if (OurState.BlockState.IsAnyInRangeSet(NeededRange.Start, NeededRange.End)) { return(true); } } } } } } return(false); }
/// <summary> /// </summary> /// <param name="Base"></param> /// <returns></returns> public void Union(BlockListState Other) { foreach (ManifestBlockListState OtherState in Other.States) { ManifestBlockListState OwnState = GetStateById(OtherState.Id); if (OwnState == null) { OwnState = new ManifestBlockListState(); OwnState.Id = OtherState.Id; OwnState.IsActive = true; OwnState.BlockState = OtherState.BlockState.Clone(); Array.Resize(ref States, States.Length + 1); States[States.Length - 1] = OwnState; } else { OwnState.BlockState.Union(OtherState.BlockState); } } }
/// <summary> /// </summary> /// <param name="Base"></param> /// <returns></returns> public BlockListState GetDelta(BlockListState Base) { // Todo: something ... return(this); }
/// <summary> /// </summary> /// <param name="Base"></param> /// <returns></returns> public BlockListState ApplyDelta(BlockListState Patch) { // Todo: something ... return(Patch); }