示例#1
0
 public void RemoveItem(IoDescriptionItem item)
 {
     if (this.items.ContainsKey(item.Address))
     {
         this.items.Remove(item.Address);
         this.PerformPropertyChanged("Items");
     }
 }
示例#2
0
        public void AddItem(IoDescriptionItem item)
        {
            if (item.Address < 0 || item.Address > (this.size - 1))
            {
                throw new ArgumentOutOfRangeException("address");
            }
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            int start = item.Address;
            int end   = start + item.Size;

            this.items.Add(item.Address, item);
            this.PerformPropertyChanged("Items");
        }
示例#3
0
        public IoDescriptionItem GetItemAtAddress(int address)
        {
            IoDescriptionItem item = null;

            for (int i = address; i >= 0; i--)
            {
                if (this.items.ContainsKey(i))
                {
                    if (address == this.items[i].Address ||
                        address < (this.items[i].Address + this.items[i].Size))
                    {
                        item = items[i];
                    }
                    break;
                }
            }
            return(item);
        }
示例#4
0
        public void MoveItem(IoDescriptionItem item, int newAddress)
        {
            if (!items.ContainsKey(item.Address))
            {
                throw new ArgumentException("The item is not part of the description", "item");
            }
            if (newAddress < 0)
            {
                throw new ArgumentException("Address can not be smaller than 0", "address");
            }
            if (newAddress + item.Size > this.Size)
            {
                throw new ArgumentException("Address plus item size is larger than description size", "address");
            }
            if (item.Address == newAddress)
            {
                return;
            }

            IoDescriptionItem nextItem = items.FirstOrDefault(x => x.Key >= newAddress && x.Key != item.Address).Value;

            if (items.ContainsKey(newAddress) || (nextItem != null && nextItem.Address <= (newAddress + (item.Size - 1))))
            {
                throw new InvalidOperationException("Destination of item is not empty");
            }
            IoDescriptionItem itemBefore = items.LastOrDefault(x => x.Key <= newAddress && x.Key != item.Address).Value;

            if ((itemBefore != null && (itemBefore.Address + (itemBefore.Size - 1) >= newAddress)))
            {
                throw new InvalidOperationException("Destination of item is not empty");
            }

            items.Remove(item.Address);
            item.Address = newAddress;
            items.Add(item.Address, item);

            this.PerformPropertyChanged("Items");
        }