コード例 #1
0
 public bool TryRelease(int target)
 {
     if (this.rangeList.Count == 0)
     {
         this.rangeList.AddFirst(new IDIssuance.Range(target, target));
         return(true);
     }
     for (LinkedListNode <IDIssuance.Range> linkedListNode = this.rangeList.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         if (linkedListNode.Value.min - 1 > target)
         {
             IDIssuance.Range value = new IDIssuance.Range(target, target);
             this.rangeList.AddBefore(linkedListNode, value);
             return(true);
         }
         if (linkedListNode.Value.min - 1 == target)
         {
             linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min - 1, linkedListNode.Value.max);
             return(true);
         }
         if (linkedListNode.Value.min <= target && linkedListNode.Value.max >= target)
         {
             return(false);
         }
         if (linkedListNode.Value.max + 1 == target)
         {
             linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min, linkedListNode.Value.max + 1);
             return(true);
         }
     }
     return(false);
 }
コード例 #2
0
 public bool TryReserveNextOf(int target, out int reserved)
 {
     reserved = target;
     for (LinkedListNode <IDIssuance.Range> linkedListNode = this.rangeList.First; linkedListNode != null; linkedListNode = linkedListNode.Next)
     {
         if (linkedListNode.Value.min > target)
         {
             reserved             = linkedListNode.Value.min;
             linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min + 1, linkedListNode.Value.max);
             this.checkNode(linkedListNode);
             return(true);
         }
         if (linkedListNode.Value.min == target)
         {
             linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min + 1, linkedListNode.Value.max);
             this.checkNode(linkedListNode);
             return(true);
         }
         if (linkedListNode.Value.min < target && linkedListNode.Value.max > target)
         {
             IDIssuance.Range value = new IDIssuance.Range(target + 1, linkedListNode.Value.max);
             linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min, target - 1);
             this.rangeList.AddAfter(linkedListNode, value);
             return(true);
         }
         if (linkedListNode.Value.max == target)
         {
             linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min, linkedListNode.Value.max - 1);
             this.checkNode(linkedListNode);
             return(true);
         }
     }
     reserved = 0;
     return(false);
 }
コード例 #3
0
        public bool TryReserve(int target)
        {
            LinkedListNode <IDIssuance.Range> linkedListNode = this.rangeList.First;

            while (linkedListNode != null && linkedListNode.Value.min <= target)
            {
                if (linkedListNode.Value.min == target)
                {
                    linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min + 1, linkedListNode.Value.max);
                    this.checkNode(linkedListNode);
                    return(true);
                }
                if (linkedListNode.Value.min < target && linkedListNode.Value.max > target)
                {
                    IDIssuance.Range value = new IDIssuance.Range(target + 1, linkedListNode.Value.max);
                    linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min, target - 1);
                    this.rangeList.AddAfter(linkedListNode, value);
                    return(true);
                }
                if (linkedListNode.Value.max == target)
                {
                    linkedListNode.Value = new IDIssuance.Range(linkedListNode.Value.min, linkedListNode.Value.max - 1);
                    this.checkNode(linkedListNode);
                    return(true);
                }
                linkedListNode = linkedListNode.Next;
            }
            return(false);
        }