/// <summary>ルート要素の再設定。</summary>
 private void RelinkRoot()
 {
     if (this.root.Count <= 1)
     {
         var parts = this.root.FirstParts;
         if (parts is BBranch)
         {
             this.root = (BBranch)parts;
         }
         else
         {
             this.root  = null;
             this.start = (BLeaf)parts;
         }
     }
 }
 /// <summary>要素を追加する(内部処理)</summary>
 /// <param name="item">追加する要素。</param>
 /// <param name="manage">処理状態結果。</param>
 private void LocalAdd(T item, ref ManageResult manage)
 {
     if (this.root == null)
     {
         if (this.start.Add(item, this, ref manage))
         {
             this.root = new BBranch(this.bracketSize, this.start, manage.newParts);
         }
     }
     else
     {
         if (this.root.Add(item, this, ref manage))
         {
             this.root = new BBranch(this.bracketSize, this.root, manage.newParts);
         }
     }
 }
            /// <summary>枝要素の分割を行う。</summary>
            /// <param name="element">追加する要素。</param>
            /// <param name="idx">追加位置。</param>
            /// <param name="parent">木構造。</param>
            /// <param name="manage">処理結果。</param>
            private void Split(IBParts element, int idx, BPlusTree <T> parent, ref ManageResult manage)
            {
                var tmpNext = new BBranch(parent.bracketSize);

                if (idx < parent.mSize + 1)
                {
                    // 後半部分はコピー
                    tmpNext.Count = parent.mSize + 1;
                    Array.Copy(this.value, parent.mSize, tmpNext.value, 0, parent.mSize + 1);

                    // 前半部は挿入
#if DEBUG
                    Array.Clear(this.value, parent.mSize, this.value.Length - parent.mSize);
#endif
                    this.Count = parent.mSize + 1;
                    if (parent.mSize + 1 > idx)
                    {
                        Array.Copy(this.value, idx, this.value, idx + 1, (parent.mSize + 1) - idx);
                    }
                    this.value[idx] = element;
                }
                else
                {
                    // 後半部分に挿入
                    int ptr = idx - (parent.mSize + 1);
                    tmpNext.Count = parent.mSize + 1;
                    if (ptr > 0)
                    {
                        Array.Copy(this.value, parent.mSize + 1, tmpNext.value, 0, ptr);
                    }
                    Array.Copy(this.value, idx, tmpNext.value, ptr + 1, parent.bracketSize - idx);
                    tmpNext.value[ptr] = element;

                    // 前半部分は変更なし
#if DEBUG
                    Array.Clear(this.value, parent.mSize + 1, this.value.Length - (parent.mSize + 1));
#endif
                    this.Count = parent.mSize + 1;
                }

                // 検索キー参照変更
                tmpNext.headerLeaf = tmpNext.TraverseLeaf;

                // 新しく生成した要素を返す
                manage.newParts = tmpNext;
            }
 /// <summary>リストから全ての項目を削除します。</summary>
 public void Clear()
 {
     this.root  = null;
     this.start = new BLeaf(this.bracketSize);
 }