private void AddRowToRowIndex(TableContextRowID rowID)
        {
            // Add the row to the list
            m_rowIndex.Add(rowID);
            // add the row to the BTH
            BTreeOnHeap <TableContextRowID> bTreeOnHeap = new BTreeOnHeap <TableContextRowID>(m_heap, m_tcInfo.hidRowIndex);

            bTreeOnHeap.AddRecord(rowID);
        }
        private void DeleteLastRowFromRowIndex()
        {
            uint rowID = m_rowIndex[m_rowIndex.Count - 1].dwRowID;

            m_rowIndex.RemoveAt(m_rowIndex.Count - 1);

            BTreeOnHeap <TableContextRowID> bTreeOnHeap = new BTreeOnHeap <TableContextRowID>(m_heap, m_tcInfo.hidRowIndex);

            bTreeOnHeap.RemoveRecord(LittleEndianConverter.GetBytes(rowID));
        }
        private Subnode m_subnodeRows; // for buffering purposes

        public TableContext(HeapOnNode heap, SubnodeBTree subnodeBTree)
        {
            m_heap         = heap;
            m_subnodeBTree = subnodeBTree;
            m_tcInfo       = new TableContextInfo(m_heap.GetHeapItem(m_heap.HeapHeader.hidUserRoot));

            BTreeOnHeap <TableContextRowID> bTreeOnHeap = new BTreeOnHeap <TableContextRowID>(m_heap, m_tcInfo.hidRowIndex);

            if (bTreeOnHeap.BTreeHeader.hidRoot.hidIndex > 0) // hidRoot is set to zero if the BTH is empty.
            {
                m_rowIndex = bTreeOnHeap.GetAll();
                m_rowIndex.Sort(TableContextRowID.CompareByRowIndex);
            }

            m_rowsPerBlock = (int)Math.Floor((double)DataBlock.MaximumDataLength / RowLength);
        }
        /// <summary>
        /// For discovery purposes
        /// </summary>
        public List <string> ListRowIndex()
        {
            List <string> result = new List <string>();
            BTreeOnHeap <TableContextRowID> bTreeOnHeap = new BTreeOnHeap <TableContextRowID>(m_heap, m_tcInfo.hidRowIndex);

            if (bTreeOnHeap.BTreeHeader.hidRoot.hidIndex > 0) // hidRoot is set to zero if the BTH is empty.
            {
                result.Add("Index levels: " + bTreeOnHeap.BTreeHeader.bIdxLevels);
            }

            for (int rowIndex = 0; rowIndex < m_rowIndex.Count; rowIndex++)
            {
                result.Add(String.Format("RowIndex: {0}, RowID: {1}", m_rowIndex[rowIndex].dwRowIndex, m_rowIndex[rowIndex].dwRowID));
            }
            return(result);
        }
        private void SwitchRowsInRowIndex(int rowIndex1, int rowIndex2)
        {
            TableContextRowID record1 = m_rowIndex[rowIndex1];
            TableContextRowID record2 = m_rowIndex[rowIndex2];
            uint temp = record1.dwRowIndex;

            record1.dwRowIndex = record2.dwRowIndex;
            record2.dwRowIndex = temp;

            m_rowIndex[rowIndex1] = record2;
            m_rowIndex[rowIndex2] = record1;

            BTreeOnHeap <TableContextRowID> bTreeOnHeap = new BTreeOnHeap <TableContextRowID>(m_heap, m_tcInfo.hidRowIndex);

            bTreeOnHeap.UpdateRecord(record1);
            bTreeOnHeap.UpdateRecord(record2);
        }