code: int  getTableSize()  {
             int    size = 0;
             int    numRows;
             int    numCols;
             int    rowSize;
  
             if (fRB.fTreeRoots[fRootIx] == null) {
                 return 0;
             }
  
             size    = /*sizeof(RBBIStateTable) - 4 */ 16;    // The header, with no rows to the table.
  
             numRows = fDStates.size();
             numCols = fRB.fSetBuilder.getNumCharCategories();
  
             //  Note  The declaration of RBBIStateTableRow is for a table of two columns.
             //        Therefore we subtract two from numCols when determining
             //        how much storage to add to a row for the total columns.
             // rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2);
             rowSize = 8 + 2*numCols;
             size   += numRows * rowSize;
             while (size % 8 > 0) {    // Size must be multiple of 8 bytes in size.
                 size++;
             }
  
             return size;
         }
docs: -----------------------------------------------------------------------------