예제 #1
0
        void InsertOrMerge(MemoryRegion prev, MemoryRegion r, MemoryRegion next)
        {
            Contract.Ensures(Brk == Contract.OldValue(Brk));

            if (MemoryRegion.CanMerge(prev, r))
            {
                prev.Expand(r);
                return;
            }

            InsertNode(prev, r);
            TryMergeWithNext(r);
        }
예제 #2
0
        bool TryMergeWithNext(MemoryRegion r)
        {
            Contract.Ensures(Brk == Contract.OldValue(Brk));

            var next = r.Next;

            if (next != null && MemoryRegion.CanMerge(r, next))
            {
                RemoveNode(r, next);
                r.Expand(next);
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #3
0
        bool TryMergeWithNext(MemoryRegion r)
        {
            Contract.Ensures(Brk == Contract.OldValue(Brk));

            var next = r.Next;
            if (next != null && MemoryRegion.CanMerge(r, next))
            {
                RemoveNode(r, next);
                r.Expand(next);
                return true;
            }
            else
            {
                return false;
            }
        }
예제 #4
0
        void InsertOrMerge(MemoryRegion prev, MemoryRegion r, MemoryRegion next)
        {
            Contract.Ensures(Brk == Contract.OldValue(Brk));

            if (MemoryRegion.CanMerge(prev, r))
            {
                prev.Expand(r);
                return;
            }

            InsertNode(prev, r);
            TryMergeWithNext(r);
        }
예제 #5
0
 bool TryMergeWithNext(MemoryRegion r)
 {
     var next = r.Next;
     if (next != null && MemoryRegion.CanMerge(r, next))
     {
         RemoveNode(r, next);
         r.Expand(next);
         return true;
     }
     else
     {
         return false;
     }
 }
예제 #6
0
        void InsertOrMerge(MemoryRegion prev, MemoryRegion r, MemoryRegion next)
        {
            if (MemoryRegion.CanMerge(prev, r))
            {
                prev.Expand(r);
                return;
            }

            InsertNode(prev, r);
            TryMergeWithNext(r);
        }