예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
                }
            }
        }
예제 #3
0
 /// <summary>
 /// </summary>
 /// <param name="Base"></param>
 /// <returns></returns>
 public BlockListState GetDelta(BlockListState Base)
 {
     // Todo: something ...
     return(this);
 }
예제 #4
0
 /// <summary>
 /// </summary>
 /// <param name="Base"></param>
 /// <returns></returns>
 public BlockListState ApplyDelta(BlockListState Patch)
 {
     // Todo: something ...
     return(Patch);
 }