Esempio n. 1
0
        /**********************************************************************
         *********************************************************************/
        //splits the block at the index until it has the required size
        public static void SplitBlock(int index, int requiredSize)
        {
            int blockSize = buddySystem[index].GetBlockSize();

            //entferne Block an Index in der Liste
            //Teile in zwei auf, solange bis blocksize = requiredsize entspricht
            while (blockSize > requiredSize)
            {
                int dummy = blockSize / 2;
                if (dummy >= requiredSize)
                {
                    //split
                    List <int> buddyNoList = buddySystem[index].GetBuddyNoList();
                    buddySystem.Remove(buddySystem[index]);
                    BuddySystemBlock block1 = new BuddySystemBlock(dummy, 2);
                    BuddySystemBlock block2 = new BuddySystemBlock(dummy, 1);
                    block1.SetBuddyNoList(buddyNoList);
                    block2.SetBuddyNoList(buddyNoList);
                    buddySystem.Insert(index, block1);
                    buddySystem.Insert(index, block2);
                }
                blockSize = dummy;
            }
        }