< Summary

Class:GDX.DataTables.StableDataTable
Assembly:GDX
File(s):./Packages/com.dotbunny.gdx/GDX/DataTables/StableDataTable.cs
Covered lines:574
Uncovered lines:680
Coverable lines:1254
Total lines:2054
Line coverage:45.7% (574 of 1254)
Covered branches:0
Total branches:0
Covered methods:112
Total methods:169
Method coverage:66.2% (112 of 169)

Coverage History

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
StableDataTable()0%110100%
GetDataVersion()0%2100%
GetStructureVersion()0%2100%
GetStructureCurrentVersion()0%2100%
Migrate(...)0%12300%
GetColumnCount()0%110100%
GetRowCount()0%110100%
GetAllRowDescriptions()0%4.044086.67%
GetRowDescription(...)0%2100%
GetRowDescriptionByOrder(...)0%110100%
GetColumnDescription(...)0%2100%
GetColumnDescriptionByOrder(...)0%110100%
GetAllColumnDescriptions()0%3.013088.89%
AssertColumnIdentifierValid(...)0%5.44055.56%
AssertRowIdentifierValid(...)0%7.195055.56%
SetColumnName(...)0%110100%
GetColumnName(...)0%110100%
SetRowName(...)0%110100%
GetRowName(...)0%110100%
GetRowNameRef(...)0%110100%
GetColumnNameRef(...)0%110100%
AddRow(...)0%15.6615085.71%
AddRows(...)0%4202000%
AddRows(...)0%4202000%
RemoveRow(...)0%6200%
AddColumn(...)0%32.0332097.06%
RemoveColumn(...)0%705.9731011.11%
SetString(...)0%110100%
SetBool(...)0%110100%
SetChar(...)0%110100%
SetSByte(...)0%110100%
SetByte(...)0%110100%
SetEnumInt(...)0%2100%
SetShort(...)0%110100%
SetUShort(...)0%110100%
SetInt(...)0%110100%
SetUInt(...)0%110100%
SetLong(...)0%110100%
SetULong(...)0%110100%
SetFloat(...)0%110100%
SetDouble(...)0%110100%
SetVector2(...)0%110100%
SetVector3(...)0%110100%
SetVector4(...)0%110100%
SetVector2Int(...)0%110100%
SetVector3Int(...)0%110100%
SetQuaternion(...)0%110100%
SetRect(...)0%110100%
SetRectInt(...)0%110100%
SetColor(...)0%110100%
SetLayerMask(...)0%110100%
SetBounds(...)0%110100%
SetBoundsInt(...)0%110100%
SetHash128(...)0%110100%
SetGradient(...)0%110100%
SetAnimationCurve(...)0%110100%
SetObject(...)0%110100%
SetTypeNameForColumn(...)0%12300%
GetTypeNameForColumn(...)0%12300%
GetString(...)0%110100%
GetBool(...)0%110100%
GetChar(...)0%110100%
GetEnumInt(...)0%2100%
GetSByte(...)0%110100%
GetByte(...)0%110100%
GetShort(...)0%110100%
GetUShort(...)0%110100%
GetInt(...)0%110100%
GetUInt(...)0%110100%
GetLong(...)0%110100%
GetULong(...)0%110100%
GetFloat(...)0%110100%
GetDouble(...)0%110100%
GetVector2(...)0%110100%
GetVector3(...)0%110100%
GetVector4(...)0%110100%
GetVector2Int(...)0%110100%
GetVector3Int(...)0%110100%
GetQuaternion(...)0%110100%
GetRect(...)0%110100%
GetRectInt(...)0%110100%
GetColor(...)0%110100%
GetLayerMask(...)0%110100%
GetBounds(...)0%110100%
GetBoundsInt(...)0%110100%
GetHash128(...)0%110100%
GetGradient(...)0%110100%
GetAnimationCurve(...)0%110100%
GetObject(...)0%110100%
GetStringRef(...)0%110100%
GetBoolRef(...)0%110100%
GetCharRef(...)0%110100%
GetSbyteRef(...)0%110100%
GetByteRef(...)0%110100%
GetShortRef(...)0%110100%
GetUshortRef(...)0%110100%
GetIntRef(...)0%110100%
GetUintRef(...)0%110100%
GetLongRef(...)0%110100%
GetUlongRef(...)0%110100%
GetFloatRef(...)0%110100%
GetDoubleRef(...)0%110100%
GetVector2Ref(...)0%110100%
GetVector3Ref(...)0%110100%
GetVector4Ref(...)0%110100%
GetVector2IntRef(...)0%110100%
GetVector3IntRef(...)0%110100%
GetQuaternionRef(...)0%110100%
GetRectRef(...)0%110100%
GetRectIntRef(...)0%110100%
GetColorRef(...)0%110100%
GetLayerMaskRef(...)0%110100%
GetBoundsRef(...)0%110100%
GetBoundsIntRef(...)0%110100%
GetHash128Ref(...)0%110100%
GetGradientRef(...)0%110100%
GetAnimationCurveRef(...)0%110100%
GetObjectRef(...)0%110100%
GetStringColumn(...)0%2100%
GetBoolColumn(...)0%2100%
GetCharColumn(...)0%2100%
GetSbyteColumn(...)0%2100%
GetByteColumn(...)0%2100%
GetShortColumn(...)0%2100%
GetUshortColumn(...)0%2100%
GetIntColumn(...)0%2100%
GetUintColumn(...)0%2100%
GetLongColumn(...)0%2100%
GetUlongColumn(...)0%2100%
GetFloatColumn(...)0%2100%
GetDoubleColumn(...)0%2100%
GetVector2Column(...)0%2100%
GetVector3Column(...)0%2100%
GetVector4Column(...)0%2100%
GetVector2IntColumn(...)0%2100%
GetVector3IntColumn(...)0%2100%
GetQuaternionColumn(...)0%2100%
GetRectColumn(...)0%2100%
GetRectIntColumn(...)0%2100%
GetColorColumn(...)0%2100%
GetLayerMaskColumn(...)0%2100%
GetBoundsColumn(...)0%2100%
GetBoundsIntColumn(...)0%2100%
GetHash128Column(...)0%2100%
GetGradientColumn(...)0%2100%
GetAnimationCurveColumn(...)0%2100%
GetObjectColumn(...)0%2100%
GetColumnOrder(...)0%2100%
SetColumnOrder(...)0%20400%
SetAllColumnOrders(...)0%6200%
GetRowOrder(...)0%2100%
SetRowOrder(...)0%20400%
SetAllRowOrders(...)0%30500%
ReSortRows[T](...)0%30500%
AddTypeNameEntry(...)0%330100%
RemoveTypeNameEntry(...)0%12300%
AddColumnInternal[T](...)0%23.1222086.76%
RemoveColumnInternal[T](...)0%4.054085%
InsertRowsOfTypeInternal[T](...)0%6.196082.61%
DeleteRowsOfTypeInternal[T](...)0%30500%
GetCellRef[T](...)0%110100%
GetCell[T](...)0%110100%
SetCell[T](...)0%110100%
GetColumn[T](...)0%2100%
SetRowOrderForColumns[T](...)0%56700%
AssertSortedColumnsArgValid(...)0%20400%
AssertColumnSortOrderValid(...)0%12300%
AssertRowSortOrderValid(...)0%12300%
AssertSortRowsArgValid(...)0%20400%

File(s)

./Packages/com.dotbunny.gdx/GDX/DataTables/StableDataTable.cs

#LineLine coverage
 1// Copyright (c) 2020-2023 dotBunny Inc.
 2// dotBunny licenses this file to you under the BSL-1.0 license.
 3// See the LICENSE file in the project root for more information.
 4
 5using System;
 6using GDX.Collections;
 7using UnityEngine;
 8using Object = UnityEngine.Object;
 9
 10namespace GDX.DataTables
 11{
 12
 13    [HelpURL("https://gdx.dotbunny.com/manual/features/data-tables.html")]
 14    [CreateAssetMenu(menuName = "GDX/Stable Data Table", fileName = "GDXStableDataTable")]
 15    [Serializable]
 16    public class StableDataTable : DataTableBase
 17    {
 18#pragma warning disable IDE1006
 19        // ReSharper disable InconsistentNaming
 20
 21        [SerializeField] internal ArrayHolder<string>[] m_AllStringColumns;
 22        [SerializeField] internal ArrayHolder<bool>[] m_AllBoolColumns;
 23        [SerializeField] internal ArrayHolder<char>[] m_AllCharColumns;
 24        [SerializeField] internal ArrayHolder<sbyte>[] m_AllSByteColumns;
 25        [SerializeField] internal ArrayHolder<byte>[] m_AllByteColumns;
 26        [SerializeField] internal ArrayHolder<short>[] m_AllShortColumns;
 27        [SerializeField] internal ArrayHolder<ushort>[] m_AllUShortColumns;
 28        [SerializeField] internal ArrayHolder<int>[] m_AllIntColumns;
 29        [SerializeField] internal ArrayHolder<uint>[] m_AllUIntColumns;
 30        [SerializeField] internal ArrayHolder<long>[] m_AllLongColumns;
 31        [SerializeField] internal ArrayHolder<ulong>[] m_AllULongColumns;
 32        [SerializeField] internal ArrayHolder<float>[] m_AllFloatColumns;
 33        [SerializeField] internal ArrayHolder<double>[] m_AllDoubleColumns;
 34        [SerializeField] internal ArrayHolder<Vector2>[] m_AllVector2Columns;
 35        [SerializeField] internal ArrayHolder<Vector3>[] m_AllVector3Columns;
 36        [SerializeField] internal ArrayHolder<Vector4>[] m_AllVector4Columns;
 37        [SerializeField] internal ArrayHolder<Vector2Int>[] m_AllVector2IntColumns;
 38        [SerializeField] internal ArrayHolder<Vector3Int>[] m_AllVector3IntColumns;
 39        [SerializeField] internal ArrayHolder<Quaternion>[] m_AllQuaternionColumns;
 40        [SerializeField] internal ArrayHolder<Rect>[] m_AllRectColumns;
 41        [SerializeField] internal ArrayHolder<RectInt>[] m_AllRectIntColumns;
 42        [SerializeField] internal ArrayHolder<Color>[] m_AllColorColumns;
 43        [SerializeField] internal ArrayHolder<LayerMask>[] m_AllLayerMaskColumns;
 44        [SerializeField] internal ArrayHolder<Bounds>[] m_AllBoundsColumns;
 45        [SerializeField] internal ArrayHolder<BoundsInt>[] m_AllBoundsIntColumns;
 46        [SerializeField] internal ArrayHolder<Hash128>[] m_AllHash128Columns;
 47        [SerializeField] internal ArrayHolder<Gradient>[] m_AllGradientColumns;
 48        [SerializeField] internal ArrayHolder<AnimationCurve>[] m_AllAnimationCurveColumns;
 49        [SerializeField] internal ArrayHolder<Object>[] m_AllObjectRefColumns;
 50        [SerializeField] internal ArrayHolder<int>[] m_AllEnumIntColumns;
 51        [SerializeField] internal string[] m_AllObjectRefTypeNames;
 52        [SerializeField] internal string[] m_AllEnumIntTypeNames;
 53
 54        /// <summary>
 55        ///     Contains the name of each column of each type. Ordered by Serializable.SerializableTypes
 56        /// </summary>
 57        [SerializeField]
 1058        internal ArrayHolder<string>[] m_AllColumnNames = new ArrayHolder<string>[Serializable.SerializableTypesCount];
 59
 60        [SerializeField] internal int[] m_RowIdentifierToDenseIndexMap;
 61        [SerializeField] internal int[] m_RowDenseIndexToIDMap;
 62        [SerializeField] internal string[] m_RowNames;
 63        [SerializeField] internal int m_RowEntriesFreeListHead;
 64        [SerializeField] internal int m_RowCount;
 65        [SerializeField] internal ColumnEntry[] m_ColumnIdentifierToDenseIndexMap;
 66        [SerializeField] internal int[] m_ColumnIdentifierToSortOrderMap;
 67        [SerializeField] internal int[] m_SortedOrderToColumnIdentifierMap;
 68
 1069        [SerializeField] internal ArrayHolder<int>[] m_ColumnDenseIndexToIDMap =
 70            new ArrayHolder<int>[Serializable.SerializableTypesCount];
 71
 72        [SerializeField] internal int m_ColumnEntriesFreeListHead;
 73        [SerializeField] internal int m_CombinedColumnCount;
 1074        [SerializeField] internal ulong m_DataVersion = 1;
 75
 76        // ReSharper enable InconsistentNaming
 77#pragma warning restore IDE1006
 78
 79
 80        /// <summary>
 81        ///     Version of internal structure format.
 82        /// </summary>
 83        /// <remarks>Bump this if you make a change that requires resizing of arrays.</remarks>
 1084        [SerializeField] internal int m_StructureVersion = 1;
 85
 86        /// <inheritdoc />
 87        public override ulong GetDataVersion()
 088        {
 089            return m_DataVersion;
 090        }
 91
 92        /// <inheritdoc />
 93        public override int GetStructureVersion()
 094        {
 095            return m_StructureVersion;
 096        }
 97
 98        /// <inheritdoc />
 99        public override int GetStructureCurrentVersion()
 0100        {
 0101            return 1;
 0102        }
 103
 104        public override bool Migrate(int currentVersion)
 0105        {
 0106            switch (m_StructureVersion)
 107            {
 108                case 0:
 109                    // Pre EnumInt
 0110                    if (currentVersion >= 0)
 0111                    {
 0112                        Array.Resize(ref m_AllColumnNames, 30);
 0113                        Array.Resize(ref m_ColumnDenseIndexToIDMap, 30);
 0114                    }
 115
 0116                    m_StructureVersion = currentVersion;
 0117                    break;
 118            }
 119
 0120            return m_StructureVersion == currentVersion;
 0121        }
 122
 123        /// <inheritdoc />
 124        public override int GetColumnCount()
 52125        {
 52126            return m_CombinedColumnCount;
 52127        }
 128
 129        /// <inheritdoc />
 130        public override int GetRowCount()
 36131        {
 36132            return m_RowCount;
 36133        }
 134
 135        /// <inheritdoc />
 136        public override RowDescription[] GetAllRowDescriptions()
 17137        {
 17138            if (m_CombinedColumnCount == 0 || m_RowCount == 0)
 1139            {
 1140                return null;
 141            }
 142
 16143            RowDescription[] returnArray = new RowDescription[m_RowCount];
 128144            for (int i = 0; i < m_RowCount; i++)
 48145            {
 48146                returnArray[i].Identifier = m_RowDenseIndexToIDMap[i];
 48147                returnArray[i].Name = m_RowNames[i];
 48148                returnArray[i].SortOrder = i;
 48149            }
 150
 16151            return returnArray;
 17152        }
 153
 154        /// <inheritdoc />
 155        public override RowDescription GetRowDescription(int rowIdentifier)
 0156        {
 0157            RowDescription returnRowDescription = new RowDescription();
 158
 0159            int rowDenseIndex = m_RowIdentifierToDenseIndexMap[rowIdentifier];
 160
 0161            returnRowDescription.Identifier = rowIdentifier;
 0162            returnRowDescription.Name = m_RowNames[rowDenseIndex];
 0163            returnRowDescription.SortOrder = rowDenseIndex;
 164
 0165            return returnRowDescription;
 0166        }
 167
 168        /// <inheritdoc />
 169        public override RowDescription GetRowDescriptionByOrder(int order)
 1170        {
 1171            return new RowDescription
 172            {
 173                Identifier = m_RowDenseIndexToIDMap[order], Name = m_RowNames[order], SortOrder = order
 174            };
 1175        }
 176
 177        /// <inheritdoc />
 178        public override ColumnDescription GetColumnDescription(int columnIdentifier)
 0179        {
 0180            ColumnDescription returnColumnDescription = new ColumnDescription();
 181
 0182            ref ColumnEntry columnEntry = ref m_ColumnIdentifierToDenseIndexMap[columnIdentifier];
 183
 0184            returnColumnDescription.Identifier = columnIdentifier;
 0185            returnColumnDescription.Name = m_AllColumnNames[(int)columnEntry.ColumnType][columnEntry.ColumnDenseIndex];
 0186            returnColumnDescription.SortOrder = m_ColumnIdentifierToSortOrderMap[columnIdentifier];
 187
 0188            return returnColumnDescription;
 0189        }
 190
 191        /// <inheritdoc />
 192        public override ColumnDescription GetColumnDescriptionByOrder(int order)
 4193        {
 4194            int idAtOrderedIndex = m_SortedOrderToColumnIdentifierMap[order];
 4195            ref ColumnEntry columnEntry = ref m_ColumnIdentifierToDenseIndexMap[idAtOrderedIndex];
 196
 4197            string columnName = m_AllColumnNames[(int)columnEntry.ColumnType][columnEntry.ColumnDenseIndex];
 198
 4199            return new ColumnDescription
 200            {
 201                Identifier = idAtOrderedIndex, Name = columnName, Type = columnEntry.ColumnType, SortOrder = order
 202            };
 4203        }
 204
 205        /// <inheritdoc />
 206        public override ColumnDescription[] GetAllColumnDescriptions()
 29207        {
 29208            if (m_CombinedColumnCount == 0)
 1209            {
 1210                return null;
 211            }
 212
 28213            ColumnDescription[] returnArray = new ColumnDescription[m_CombinedColumnCount];
 214
 298215            for (int i = 0; i < m_CombinedColumnCount; i++)
 121216            {
 121217                int columnID = m_SortedOrderToColumnIdentifierMap[i];
 121218                AssertColumnIdentifierValid(columnID);
 121219                ref ColumnEntry entryForID = ref m_ColumnIdentifierToDenseIndexMap[columnID];
 121220                ref ArrayHolder<string> nameColumnsForType = ref m_AllColumnNames[(int)entryForID.ColumnType];
 221
 121222                string name = nameColumnsForType[entryForID.ColumnDenseIndex];
 223
 121224                returnArray[i] = new ColumnDescription
 225                {
 226                    Name = name, Identifier = columnID, Type = entryForID.ColumnType, SortOrder = i
 227                };
 121228            }
 229
 28230            return returnArray;
 29231        }
 232
 233        internal void AssertColumnIdentifierValid(int columnID)
 1145234        {
 1145235            if (columnID < 0 || columnID >= m_ColumnIdentifierToDenseIndexMap.Length)
 0236            {
 0237                throw new ArgumentException("Invalid column outside valid ID range: " + columnID);
 238            }
 239
 1145240            ref ColumnEntry columnEntry = ref m_ColumnIdentifierToDenseIndexMap[columnID];
 241
 1145242            if (columnEntry.ColumnType == Serializable.SerializableTypes.Invalid)
 0243            {
 0244                throw new ArgumentException("Invalid column pointing to deallocated entry: " + columnID);
 245            }
 1145246        }
 247
 248        internal void AssertRowIdentifierValid(int rowID)
 921249        {
 921250            if (rowID < 0 || rowID >= m_RowIdentifierToDenseIndexMap.Length)
 0251            {
 0252                throw new ArgumentException("Invalid row outside valid ID range: " + rowID);
 253            }
 254
 921255            int rowIndex = m_RowIdentifierToDenseIndexMap[rowID];
 256
 921257            if (rowIndex >= m_RowCount || rowIndex < 0)
 0258            {
 0259                throw new ArgumentException("Invalid row outside valid ID range: " + rowID);
 260            }
 921261        }
 262
 263        /// <inheritdoc />
 264        public override void SetColumnName(int columnIdentifier, string columnName)
 30265        {
 30266            AssertColumnIdentifierValid(columnIdentifier);
 30267            ref ColumnEntry columnEntry = ref m_ColumnIdentifierToDenseIndexMap[columnIdentifier];
 30268            m_AllColumnNames[(int)columnEntry.ColumnType][columnEntry.ColumnDenseIndex] = columnName;
 30269        }
 270
 271        /// <inheritdoc />
 272        public override string GetColumnName(int columnIdentifier)
 60273        {
 60274            AssertColumnIdentifierValid(columnIdentifier);
 60275            ref ColumnEntry columnEntry = ref m_ColumnIdentifierToDenseIndexMap[columnIdentifier];
 60276            return m_AllColumnNames[(int)columnEntry.ColumnType][columnEntry.ColumnDenseIndex];
 60277        }
 278
 279
 280        /// <inheritdoc />
 281        public override void SetRowName(int rowIdentifier, string rowName)
 10282        {
 10283            AssertRowIdentifierValid(rowIdentifier);
 10284            int rowDenseIndex = m_RowIdentifierToDenseIndexMap[rowIdentifier];
 10285            m_RowNames[rowDenseIndex] = rowName;
 10286        }
 287
 288        /// <inheritdoc />
 289        public override string GetRowName(int rowIdentifier)
 21290        {
 21291            AssertRowIdentifierValid(rowIdentifier);
 21292            int rowDenseIndex = m_RowIdentifierToDenseIndexMap[rowIdentifier];
 21293            return m_RowNames[rowDenseIndex];
 21294        }
 295
 296        public ref string GetRowNameRef(int rowIdentifier)
 20297        {
 20298            AssertRowIdentifierValid(rowIdentifier);
 20299            int rowDenseIndex = m_RowIdentifierToDenseIndexMap[rowIdentifier];
 20300            return ref m_RowNames[rowDenseIndex];
 20301        }
 302
 303        public ref string GetColumnNameRef(int columnIdentifier)
 60304        {
 60305            AssertColumnIdentifierValid(columnIdentifier);
 60306            ref ColumnEntry columnEntry = ref m_ColumnIdentifierToDenseIndexMap[columnIdentifier];
 60307            return ref m_AllColumnNames[(int)columnEntry.ColumnType][columnEntry.ColumnDenseIndex];
 60308        }
 309
 310        /// <inheritdoc />
 311        public override int AddRow(string rowName = null, int insertAtRowIdentifier = -1)
 56312        {
 56313            if (insertAtRowIdentifier >= 0)
 0314            {
 0315                AssertRowIdentifierValid(insertAtRowIdentifier);
 0316            }
 317
 56318            int rowID = m_RowEntriesFreeListHead;
 56319            int rowIDToDenseIndexMapLength = m_RowIdentifierToDenseIndexMap?.Length ?? 0;
 56320            if (rowID >= rowIDToDenseIndexMapLength)
 21321            {
 21322                int newSize = rowID * 2;
 21323                newSize = newSize == 0 ? 1 : newSize;
 21324                Array.Resize(ref m_RowIdentifierToDenseIndexMap, newSize);
 188325                for (int i = rowID; i < newSize; i++)
 73326                {
 73327                    m_RowIdentifierToDenseIndexMap[i] = i + 1;
 73328                }
 21329            }
 330
 56331            int denseIndexToIDMapLength = m_RowDenseIndexToIDMap?.Length ?? 0;
 56332            Array.Resize(ref m_RowDenseIndexToIDMap, denseIndexToIDMapLength + 1);
 56333            Array.Resize(ref m_RowNames, denseIndexToIDMapLength + 1);
 334
 56335            int insertAt = insertAtRowIdentifier < 0
 336                ? m_RowCount
 337                : m_RowIdentifierToDenseIndexMap[insertAtRowIdentifier];
 338
 112339            for (int i = denseIndexToIDMapLength; i > insertAt; i--)
 0340            {
 0341                int currentRowID = m_RowDenseIndexToIDMap[i - 1];
 0342                m_RowDenseIndexToIDMap[i] = currentRowID;
 343
 0344                m_RowIdentifierToDenseIndexMap[currentRowID] = i;
 345
 0346                m_RowNames[i] = m_RowNames[i - 1];
 0347            }
 348
 56349            m_RowEntriesFreeListHead = m_RowIdentifierToDenseIndexMap[rowID];
 56350            m_RowIdentifierToDenseIndexMap[rowID] = insertAt;
 56351            m_RowDenseIndexToIDMap[insertAt] = rowID;
 56352            m_RowNames[insertAt] = rowName == null ? rowID.ToString() : rowName;
 353
 56354            InsertRowsOfTypeInternal(ref m_AllStringColumns, insertAt, 1);
 56355            InsertRowsOfTypeInternal(ref m_AllBoolColumns, insertAt, 1);
 56356            InsertRowsOfTypeInternal(ref m_AllCharColumns, insertAt, 1);
 56357            InsertRowsOfTypeInternal(ref m_AllSByteColumns, insertAt, 1);
 56358            InsertRowsOfTypeInternal(ref m_AllByteColumns, insertAt, 1);
 56359            InsertRowsOfTypeInternal(ref m_AllShortColumns, insertAt, 1);
 56360            InsertRowsOfTypeInternal(ref m_AllUShortColumns, insertAt, 1);
 56361            InsertRowsOfTypeInternal(ref m_AllIntColumns, insertAt, 1);
 56362            InsertRowsOfTypeInternal(ref m_AllUIntColumns, insertAt, 1);
 56363            InsertRowsOfTypeInternal(ref m_AllLongColumns, insertAt, 1);
 56364            InsertRowsOfTypeInternal(ref m_AllULongColumns, insertAt, 1);
 56365            InsertRowsOfTypeInternal(ref m_AllFloatColumns, insertAt, 1);
 56366            InsertRowsOfTypeInternal(ref m_AllDoubleColumns, insertAt, 1);
 56367            InsertRowsOfTypeInternal(ref m_AllVector2Columns, insertAt, 1);
 56368            InsertRowsOfTypeInternal(ref m_AllVector3Columns, insertAt, 1);
 56369            InsertRowsOfTypeInternal(ref m_AllVector4Columns, insertAt, 1);
 56370            InsertRowsOfTypeInternal(ref m_AllVector2IntColumns, insertAt, 1);
 56371            InsertRowsOfTypeInternal(ref m_AllVector3IntColumns, insertAt, 1);
 56372            InsertRowsOfTypeInternal(ref m_AllQuaternionColumns, insertAt, 1);
 56373            InsertRowsOfTypeInternal(ref m_AllRectColumns, insertAt, 1);
 56374            InsertRowsOfTypeInternal(ref m_AllRectIntColumns, insertAt, 1);
 56375            InsertRowsOfTypeInternal(ref m_AllColorColumns, insertAt, 1);
 56376            InsertRowsOfTypeInternal(ref m_AllLayerMaskColumns, insertAt, 1);
 56377            InsertRowsOfTypeInternal(ref m_AllBoundsColumns, insertAt, 1);
 56378            InsertRowsOfTypeInternal(ref m_AllBoundsIntColumns, insertAt, 1);
 56379            InsertRowsOfTypeInternal(ref m_AllHash128Columns, insertAt, 1);
 56380            InsertRowsOfTypeInternal(ref m_AllGradientColumns, insertAt, 1);
 56381            InsertRowsOfTypeInternal(ref m_AllAnimationCurveColumns, insertAt, 1);
 56382            InsertRowsOfTypeInternal(ref m_AllObjectRefColumns, insertAt, 1);
 56383            InsertRowsOfTypeInternal(ref m_AllEnumIntColumns, insertAt, 1);
 384
 56385            ++m_RowCount;
 56386            m_DataVersion++;
 387
 56388            return rowID;
 56389        }
 390
 391        public void AddRows(int numberOfNewRows, string[] rowNames = null, int insertAtRowID = -1)
 0392        {
 0393            if (insertAtRowID >= 0)
 0394            {
 0395                AssertRowIdentifierValid(insertAtRowID);
 0396            }
 397
 0398            int rowIDToDenseIndexMapLength = m_RowIdentifierToDenseIndexMap?.Length ?? 0;
 0399            int newCount = m_RowCount + numberOfNewRows;
 0400            if (newCount > rowIDToDenseIndexMapLength)
 0401            {
 0402                int newSize = newCount;
 0403                --newSize;
 0404                newSize |= newSize >> 1;
 0405                newSize |= newSize >> 2;
 0406                newSize |= newSize >> 4;
 0407                newSize |= newSize >> 8;
 0408                newSize |= newSize >> 16;
 0409                ++newSize;
 410
 0411                newSize = newSize == 0 ? 1 : newSize;
 0412                Array.Resize(ref m_RowIdentifierToDenseIndexMap, newSize);
 0413                for (int i = rowIDToDenseIndexMapLength; i < newSize; i++)
 0414                {
 0415                    m_RowIdentifierToDenseIndexMap[i] = i + 1;
 0416                }
 0417            }
 418
 0419            int denseIndexToIDMapLength = m_RowDenseIndexToIDMap?.Length ?? 0;
 0420            Array.Resize(ref m_RowDenseIndexToIDMap, denseIndexToIDMapLength + numberOfNewRows);
 0421            Array.Resize(ref rowNames, denseIndexToIDMapLength + numberOfNewRows);
 422
 0423            int insertAt = insertAtRowID < 0 ? m_RowCount : m_RowIdentifierToDenseIndexMap[insertAtRowID];
 424
 0425            for (int i = denseIndexToIDMapLength; i > insertAt + numberOfNewRows - 1; i--)
 0426            {
 0427                int currentRowID = m_RowDenseIndexToIDMap[i - numberOfNewRows];
 0428                m_RowDenseIndexToIDMap[i] = currentRowID;
 429
 0430                m_RowIdentifierToDenseIndexMap[currentRowID] = i;
 431
 0432                rowNames[i] = rowNames[i - numberOfNewRows];
 0433            }
 434
 0435            int freeListHead = m_RowEntriesFreeListHead;
 436
 0437            for (int i = 0; i < numberOfNewRows; i++)
 0438            {
 0439                int rowID = freeListHead;
 0440                freeListHead = m_RowIdentifierToDenseIndexMap[rowID];
 0441                m_RowIdentifierToDenseIndexMap[rowID] = insertAt + i;
 0442                m_RowDenseIndexToIDMap[insertAt + i] = rowID;
 0443            }
 444
 0445            int numberOfNewRowNames = rowNames?.Length ?? 0;
 0446            string emptyString = string.Empty;
 0447            for (int i = 0; i < numberOfNewRowNames; i++)
 0448            {
 0449                string currentRowName = rowNames[i];
 0450                int rowIDAt = m_RowDenseIndexToIDMap[insertAt + i];
 0451                rowNames[insertAt + i] = currentRowName == null ? rowIDAt.ToString() : currentRowName;
 0452            }
 453
 0454            for (int i = numberOfNewRowNames; i < numberOfNewRows; i++)
 0455            {
 0456                int rowIDAt = m_RowDenseIndexToIDMap[insertAt + i];
 0457                rowNames[insertAt + i] = rowIDAt.ToString();
 0458            }
 459
 0460            m_RowEntriesFreeListHead = freeListHead;
 461
 0462            InsertRowsOfTypeInternal(ref m_AllStringColumns, insertAt, numberOfNewRows);
 0463            InsertRowsOfTypeInternal(ref m_AllBoolColumns, insertAt, numberOfNewRows);
 0464            InsertRowsOfTypeInternal(ref m_AllCharColumns, insertAt, numberOfNewRows);
 0465            InsertRowsOfTypeInternal(ref m_AllSByteColumns, insertAt, numberOfNewRows);
 0466            InsertRowsOfTypeInternal(ref m_AllByteColumns, insertAt, numberOfNewRows);
 0467            InsertRowsOfTypeInternal(ref m_AllShortColumns, insertAt, numberOfNewRows);
 0468            InsertRowsOfTypeInternal(ref m_AllUShortColumns, insertAt, numberOfNewRows);
 0469            InsertRowsOfTypeInternal(ref m_AllIntColumns, insertAt, numberOfNewRows);
 0470            InsertRowsOfTypeInternal(ref m_AllUIntColumns, insertAt, numberOfNewRows);
 0471            InsertRowsOfTypeInternal(ref m_AllLongColumns, insertAt, numberOfNewRows);
 0472            InsertRowsOfTypeInternal(ref m_AllULongColumns, insertAt, numberOfNewRows);
 0473            InsertRowsOfTypeInternal(ref m_AllFloatColumns, insertAt, numberOfNewRows);
 0474            InsertRowsOfTypeInternal(ref m_AllDoubleColumns, insertAt, numberOfNewRows);
 0475            InsertRowsOfTypeInternal(ref m_AllVector2Columns, insertAt, numberOfNewRows);
 0476            InsertRowsOfTypeInternal(ref m_AllVector3Columns, insertAt, numberOfNewRows);
 0477            InsertRowsOfTypeInternal(ref m_AllVector4Columns, insertAt, numberOfNewRows);
 0478            InsertRowsOfTypeInternal(ref m_AllVector2IntColumns, insertAt, numberOfNewRows);
 0479            InsertRowsOfTypeInternal(ref m_AllVector3IntColumns, insertAt, numberOfNewRows);
 0480            InsertRowsOfTypeInternal(ref m_AllQuaternionColumns, insertAt, numberOfNewRows);
 0481            InsertRowsOfTypeInternal(ref m_AllRectColumns, insertAt, numberOfNewRows);
 0482            InsertRowsOfTypeInternal(ref m_AllRectIntColumns, insertAt, numberOfNewRows);
 0483            InsertRowsOfTypeInternal(ref m_AllColorColumns, insertAt, numberOfNewRows);
 0484            InsertRowsOfTypeInternal(ref m_AllLayerMaskColumns, insertAt, numberOfNewRows);
 0485            InsertRowsOfTypeInternal(ref m_AllBoundsColumns, insertAt, numberOfNewRows);
 0486            InsertRowsOfTypeInternal(ref m_AllBoundsIntColumns, insertAt, numberOfNewRows);
 0487            InsertRowsOfTypeInternal(ref m_AllHash128Columns, insertAt, numberOfNewRows);
 0488            InsertRowsOfTypeInternal(ref m_AllGradientColumns, insertAt, numberOfNewRows);
 0489            InsertRowsOfTypeInternal(ref m_AllAnimationCurveColumns, insertAt, numberOfNewRows);
 0490            InsertRowsOfTypeInternal(ref m_AllObjectRefColumns, insertAt, numberOfNewRows);
 0491            InsertRowsOfTypeInternal(ref m_AllEnumIntColumns, insertAt, numberOfNewRows);
 492
 0493            m_RowCount += numberOfNewRows;
 0494            m_DataVersion++;
 0495        }
 496
 497        public void AddRows(int numberOfNewRows, ref int[] rowIDs, string[] rowNames = null, int insertAtRowID = -1)
 0498        {
 0499            if (insertAtRowID >= 0)
 0500            {
 0501                AssertRowIdentifierValid(insertAtRowID);
 0502            }
 503
 0504            int rowIDToDenseIndexMapLength = m_RowIdentifierToDenseIndexMap?.Length ?? 0;
 0505            int newCount = m_RowCount + numberOfNewRows;
 0506            if (newCount > rowIDToDenseIndexMapLength)
 0507            {
 0508                int newSize = newCount;
 0509                --newSize;
 0510                newSize |= newSize >> 1;
 0511                newSize |= newSize >> 2;
 0512                newSize |= newSize >> 4;
 0513                newSize |= newSize >> 8;
 0514                newSize |= newSize >> 16;
 0515                ++newSize;
 516
 0517                newSize = newSize == 0 ? 1 : newSize;
 0518                Array.Resize(ref m_RowIdentifierToDenseIndexMap, newSize);
 0519                for (int i = rowIDToDenseIndexMapLength; i < newSize; i++)
 0520                {
 0521                    m_RowIdentifierToDenseIndexMap[i] = i + 1;
 0522                }
 0523            }
 524
 0525            int denseIndexToIDMapLength = m_RowDenseIndexToIDMap?.Length ?? 0;
 0526            Array.Resize(ref m_RowDenseIndexToIDMap, denseIndexToIDMapLength + numberOfNewRows);
 527
 0528            int insertAt = insertAtRowID < 0 ? m_RowCount : m_RowIdentifierToDenseIndexMap[insertAtRowID];
 529
 0530            for (int i = denseIndexToIDMapLength; i > insertAt + numberOfNewRows - 1; i--)
 0531            {
 0532                int currentRowID = m_RowDenseIndexToIDMap[i - numberOfNewRows];
 0533                m_RowDenseIndexToIDMap[i] = currentRowID;
 534
 0535                m_RowIdentifierToDenseIndexMap[currentRowID] = i;
 536
 0537                rowNames[i] = rowNames[i - numberOfNewRows];
 0538            }
 539
 0540            int freeListHead = m_RowEntriesFreeListHead;
 541
 0542            for (int i = 0; i < numberOfNewRows; i++)
 0543            {
 0544                int rowID = freeListHead;
 0545                freeListHead = m_RowIdentifierToDenseIndexMap[rowID];
 0546                m_RowIdentifierToDenseIndexMap[rowID] = insertAt + i;
 0547                m_RowDenseIndexToIDMap[insertAt + i] = rowID;
 0548                rowIDs[i] = rowID;
 0549            }
 550
 0551            int numberOfNewRowNames = rowNames?.Length ?? 0;
 0552            for (int i = 0; i < numberOfNewRowNames; i++)
 0553            {
 0554                string currentRowName = rowNames[i];
 0555                int rowIDAt = m_RowDenseIndexToIDMap[insertAt + i];
 0556                rowNames[insertAt + i] = currentRowName == null ? rowIDAt.ToString() : currentRowName;
 0557            }
 558
 0559            for (int i = numberOfNewRowNames; i < numberOfNewRows; i++)
 0560            {
 0561                int rowIDAt = m_RowDenseIndexToIDMap[insertAt + i];
 0562                rowNames[insertAt + i] = rowIDAt.ToString();
 0563            }
 564
 0565            m_RowEntriesFreeListHead = freeListHead;
 566
 0567            InsertRowsOfTypeInternal(ref m_AllStringColumns, insertAt, numberOfNewRows);
 0568            InsertRowsOfTypeInternal(ref m_AllBoolColumns, insertAt, numberOfNewRows);
 0569            InsertRowsOfTypeInternal(ref m_AllCharColumns, insertAt, numberOfNewRows);
 0570            InsertRowsOfTypeInternal(ref m_AllSByteColumns, insertAt, numberOfNewRows);
 0571            InsertRowsOfTypeInternal(ref m_AllByteColumns, insertAt, numberOfNewRows);
 0572            InsertRowsOfTypeInternal(ref m_AllShortColumns, insertAt, numberOfNewRows);
 0573            InsertRowsOfTypeInternal(ref m_AllUShortColumns, insertAt, numberOfNewRows);
 0574            InsertRowsOfTypeInternal(ref m_AllIntColumns, insertAt, numberOfNewRows);
 0575            InsertRowsOfTypeInternal(ref m_AllUIntColumns, insertAt, numberOfNewRows);
 0576            InsertRowsOfTypeInternal(ref m_AllLongColumns, insertAt, numberOfNewRows);
 0577            InsertRowsOfTypeInternal(ref m_AllULongColumns, insertAt, numberOfNewRows);
 0578            InsertRowsOfTypeInternal(ref m_AllFloatColumns, insertAt, numberOfNewRows);
 0579            InsertRowsOfTypeInternal(ref m_AllDoubleColumns, insertAt, numberOfNewRows);
 0580            InsertRowsOfTypeInternal(ref m_AllVector2Columns, insertAt, numberOfNewRows);
 0581            InsertRowsOfTypeInternal(ref m_AllVector3Columns, insertAt, numberOfNewRows);
 0582            InsertRowsOfTypeInternal(ref m_AllVector4Columns, insertAt, numberOfNewRows);
 0583            InsertRowsOfTypeInternal(ref m_AllVector2IntColumns, insertAt, numberOfNewRows);
 0584            InsertRowsOfTypeInternal(ref m_AllVector3IntColumns, insertAt, numberOfNewRows);
 0585            InsertRowsOfTypeInternal(ref m_AllQuaternionColumns, insertAt, numberOfNewRows);
 0586            InsertRowsOfTypeInternal(ref m_AllRectColumns, insertAt, numberOfNewRows);
 0587            InsertRowsOfTypeInternal(ref m_AllRectIntColumns, insertAt, numberOfNewRows);
 0588            InsertRowsOfTypeInternal(ref m_AllColorColumns, insertAt, numberOfNewRows);
 0589            InsertRowsOfTypeInternal(ref m_AllLayerMaskColumns, insertAt, numberOfNewRows);
 0590            InsertRowsOfTypeInternal(ref m_AllBoundsColumns, insertAt, numberOfNewRows);
 0591            InsertRowsOfTypeInternal(ref m_AllBoundsIntColumns, insertAt, numberOfNewRows);
 0592            InsertRowsOfTypeInternal(ref m_AllHash128Columns, insertAt, numberOfNewRows);
 0593            InsertRowsOfTypeInternal(ref m_AllGradientColumns, insertAt, numberOfNewRows);
 0594            InsertRowsOfTypeInternal(ref m_AllAnimationCurveColumns, insertAt, numberOfNewRows);
 0595            InsertRowsOfTypeInternal(ref m_AllObjectRefColumns, insertAt, numberOfNewRows);
 0596            InsertRowsOfTypeInternal(ref m_AllEnumIntColumns, insertAt, numberOfNewRows);
 597
 0598            m_RowCount += numberOfNewRows;
 0599            m_DataVersion++;
 0600        }
 601
 602        /// <inheritdoc />
 603        public override void RemoveRow(int rowIdentifier)
 0604        {
 0605            AssertRowIdentifierValid(rowIdentifier);
 0606            int rowDenseIndex = m_RowIdentifierToDenseIndexMap[rowIdentifier];
 0607            for (int i = rowDenseIndex + 1; i < m_RowCount; i++)
 0608            {
 0609                int currentRowID = m_RowDenseIndexToIDMap[i];
 0610                m_RowIdentifierToDenseIndexMap[currentRowID] = i - 1;
 0611                m_RowDenseIndexToIDMap[i - 1] = currentRowID;
 0612                m_RowNames[i - 1] = m_RowNames[i];
 0613            }
 614
 0615            m_RowIdentifierToDenseIndexMap[rowIdentifier] = m_RowEntriesFreeListHead;
 0616            m_RowEntriesFreeListHead = rowIdentifier;
 0617            Array.Resize(ref m_RowDenseIndexToIDMap, m_RowCount - 1);
 0618            Array.Resize(ref m_RowNames, m_RowCount - 1);
 619
 0620            DeleteRowsOfTypeInternal(ref m_AllStringColumns, rowDenseIndex, 1);
 0621            DeleteRowsOfTypeInternal(ref m_AllBoolColumns, rowDenseIndex, 1);
 0622            DeleteRowsOfTypeInternal(ref m_AllCharColumns, rowDenseIndex, 1);
 0623            DeleteRowsOfTypeInternal(ref m_AllSByteColumns, rowDenseIndex, 1);
 0624            DeleteRowsOfTypeInternal(ref m_AllByteColumns, rowDenseIndex, 1);
 0625            DeleteRowsOfTypeInternal(ref m_AllShortColumns, rowDenseIndex, 1);
 0626            DeleteRowsOfTypeInternal(ref m_AllUShortColumns, rowDenseIndex, 1);
 0627            DeleteRowsOfTypeInternal(ref m_AllIntColumns, rowDenseIndex, 1);
 0628            DeleteRowsOfTypeInternal(ref m_AllUIntColumns, rowDenseIndex, 1);
 0629            DeleteRowsOfTypeInternal(ref m_AllLongColumns, rowDenseIndex, 1);
 0630            DeleteRowsOfTypeInternal(ref m_AllULongColumns, rowDenseIndex, 1);
 0631            DeleteRowsOfTypeInternal(ref m_AllFloatColumns, rowDenseIndex, 1);
 0632            DeleteRowsOfTypeInternal(ref m_AllDoubleColumns, rowDenseIndex, 1);
 0633            DeleteRowsOfTypeInternal(ref m_AllVector2Columns, rowDenseIndex, 1);
 0634            DeleteRowsOfTypeInternal(ref m_AllVector3Columns, rowDenseIndex, 1);
 0635            DeleteRowsOfTypeInternal(ref m_AllVector4Columns, rowDenseIndex, 1);
 0636            DeleteRowsOfTypeInternal(ref m_AllVector2IntColumns, rowDenseIndex, 1);
 0637            DeleteRowsOfTypeInternal(ref m_AllVector3IntColumns, rowDenseIndex, 1);
 0638            DeleteRowsOfTypeInternal(ref m_AllQuaternionColumns, rowDenseIndex, 1);
 0639            DeleteRowsOfTypeInternal(ref m_AllRectColumns, rowDenseIndex, 1);
 0640            DeleteRowsOfTypeInternal(ref m_AllRectIntColumns, rowDenseIndex, 1);
 0641            DeleteRowsOfTypeInternal(ref m_AllColorColumns, rowDenseIndex, 1);
 0642            DeleteRowsOfTypeInternal(ref m_AllLayerMaskColumns, rowDenseIndex, 1);
 0643            DeleteRowsOfTypeInternal(ref m_AllBoundsColumns, rowDenseIndex, 1);
 0644            DeleteRowsOfTypeInternal(ref m_AllBoundsIntColumns, rowDenseIndex, 1);
 0645            DeleteRowsOfTypeInternal(ref m_AllHash128Columns, rowDenseIndex, 1);
 0646            DeleteRowsOfTypeInternal(ref m_AllGradientColumns, rowDenseIndex, 1);
 0647            DeleteRowsOfTypeInternal(ref m_AllAnimationCurveColumns, rowDenseIndex, 1);
 0648            DeleteRowsOfTypeInternal(ref m_AllObjectRefColumns, rowDenseIndex, 1);
 0649            DeleteRowsOfTypeInternal(ref m_AllEnumIntColumns, rowDenseIndex, 1);
 650
 0651            --m_RowCount;
 0652            m_DataVersion++;
 0653        }
 654
 655        /// <inheritdoc />
 656        public override int AddColumn(Serializable.SerializableTypes columnType, string columnName,
 657            int insertAtColumnIdentifier = -1)
 114658        {
 114659            switch (columnType)
 660            {
 661                case Serializable.SerializableTypes.String:
 13662                    return AddColumnInternal(columnName, ref m_AllStringColumns, Serializable.SerializableTypes.String,
 663                        insertAtColumnIdentifier);
 664                case Serializable.SerializableTypes.Char:
 3665                    return AddColumnInternal(columnName, ref m_AllCharColumns, Serializable.SerializableTypes.Char,
 666                        insertAtColumnIdentifier);
 667                case Serializable.SerializableTypes.Bool:
 4668                    return AddColumnInternal(columnName, ref m_AllBoolColumns, Serializable.SerializableTypes.Bool,
 669                        insertAtColumnIdentifier);
 670                case Serializable.SerializableTypes.SByte:
 4671                    return AddColumnInternal(columnName, ref m_AllSByteColumns, Serializable.SerializableTypes.SByte,
 672                        insertAtColumnIdentifier);
 673                case Serializable.SerializableTypes.Byte:
 3674                    return AddColumnInternal(columnName, ref m_AllByteColumns, Serializable.SerializableTypes.Byte,
 675                        insertAtColumnIdentifier);
 676                case Serializable.SerializableTypes.Short:
 3677                    return AddColumnInternal(columnName, ref m_AllShortColumns, Serializable.SerializableTypes.Short,
 678                        insertAtColumnIdentifier);
 679                case Serializable.SerializableTypes.UShort:
 3680                    return AddColumnInternal(columnName, ref m_AllUShortColumns, Serializable.SerializableTypes.UShort,
 681                        insertAtColumnIdentifier);
 682                case Serializable.SerializableTypes.Int:
 3683                    return AddColumnInternal(columnName, ref m_AllIntColumns, Serializable.SerializableTypes.Int,
 684                        insertAtColumnIdentifier);
 685                case Serializable.SerializableTypes.UInt:
 3686                    return AddColumnInternal(columnName, ref m_AllUIntColumns, Serializable.SerializableTypes.UInt,
 687                        insertAtColumnIdentifier);
 688                case Serializable.SerializableTypes.Long:
 3689                    return AddColumnInternal(columnName, ref m_AllLongColumns, Serializable.SerializableTypes.Long,
 690                        insertAtColumnIdentifier);
 691                case Serializable.SerializableTypes.ULong:
 3692                    return AddColumnInternal(columnName, ref m_AllULongColumns, Serializable.SerializableTypes.ULong,
 693                        insertAtColumnIdentifier);
 694                case Serializable.SerializableTypes.Float:
 4695                    return AddColumnInternal(columnName, ref m_AllFloatColumns, Serializable.SerializableTypes.Float,
 696                        insertAtColumnIdentifier);
 697                case Serializable.SerializableTypes.Double:
 4698                    return AddColumnInternal(columnName, ref m_AllDoubleColumns, Serializable.SerializableTypes.Double,
 699                        insertAtColumnIdentifier);
 700                case Serializable.SerializableTypes.Vector2:
 5701                    return AddColumnInternal(columnName, ref m_AllVector2Columns,
 702                        Serializable.SerializableTypes.Vector2,
 703                        insertAtColumnIdentifier);
 704                case Serializable.SerializableTypes.Vector3:
 3705                    return AddColumnInternal(columnName, ref m_AllVector3Columns,
 706                        Serializable.SerializableTypes.Vector3,
 707                        insertAtColumnIdentifier);
 708                case Serializable.SerializableTypes.Vector4:
 3709                    return AddColumnInternal(columnName, ref m_AllVector4Columns,
 710                        Serializable.SerializableTypes.Vector4,
 711                        insertAtColumnIdentifier);
 712                case Serializable.SerializableTypes.Vector2Int:
 3713                    return AddColumnInternal(columnName, ref m_AllVector2IntColumns,
 714                        Serializable.SerializableTypes.Vector2Int, insertAtColumnIdentifier);
 715                case Serializable.SerializableTypes.Vector3Int:
 3716                    return AddColumnInternal(columnName, ref m_AllVector3IntColumns,
 717                        Serializable.SerializableTypes.Vector3Int, insertAtColumnIdentifier);
 718                case Serializable.SerializableTypes.Quaternion:
 4719                    return AddColumnInternal(columnName, ref m_AllQuaternionColumns,
 720                        Serializable.SerializableTypes.Quaternion, insertAtColumnIdentifier);
 721                case Serializable.SerializableTypes.Rect:
 3722                    return AddColumnInternal(columnName, ref m_AllRectColumns, Serializable.SerializableTypes.Rect,
 723                        insertAtColumnIdentifier);
 724                case Serializable.SerializableTypes.RectInt:
 3725                    return AddColumnInternal(columnName, ref m_AllRectIntColumns,
 726                        Serializable.SerializableTypes.RectInt,
 727                        insertAtColumnIdentifier);
 728                case Serializable.SerializableTypes.Color:
 3729                    return AddColumnInternal(columnName, ref m_AllColorColumns, Serializable.SerializableTypes.Color,
 730                        insertAtColumnIdentifier);
 731                case Serializable.SerializableTypes.LayerMask:
 3732                    return AddColumnInternal(columnName, ref m_AllLayerMaskColumns,
 733                        Serializable.SerializableTypes.LayerMask, insertAtColumnIdentifier);
 734                case Serializable.SerializableTypes.Bounds:
 9735                    return AddColumnInternal(columnName, ref m_AllBoundsColumns, Serializable.SerializableTypes.Bounds,
 736                        insertAtColumnIdentifier);
 737                case Serializable.SerializableTypes.BoundsInt:
 3738                    return AddColumnInternal(columnName, ref m_AllBoundsIntColumns,
 739                        Serializable.SerializableTypes.BoundsInt, insertAtColumnIdentifier);
 740                case Serializable.SerializableTypes.Hash128:
 3741                    return AddColumnInternal(columnName, ref m_AllHash128Columns,
 742                        Serializable.SerializableTypes.Hash128,
 743                        insertAtColumnIdentifier);
 744                case Serializable.SerializableTypes.Gradient:
 3745                    return AddColumnInternal(columnName, ref m_AllGradientColumns,
 746                        Serializable.SerializableTypes.Gradient, insertAtColumnIdentifier);
 747                case Serializable.SerializableTypes.AnimationCurve:
 3748                    return AddColumnInternal(columnName, ref m_AllAnimationCurveColumns,
 749                        Serializable.SerializableTypes.AnimationCurve, insertAtColumnIdentifier);
 750                case Serializable.SerializableTypes.Object:
 4751                    return AddColumnInternal(columnName, ref m_AllObjectRefColumns,
 752                        Serializable.SerializableTypes.Object,
 753                        insertAtColumnIdentifier);
 754                case Serializable.SerializableTypes.EnumInt:
 3755                    return AddColumnInternal(columnName, ref m_AllEnumIntColumns,
 756                        Serializable.SerializableTypes.EnumInt,
 757                        insertAtColumnIdentifier);
 758            }
 759
 0760            return -1;
 114761        }
 762
 763        /// <inheritdoc />
 764        public override void RemoveColumn(Serializable.SerializableTypes columnType, int columnIdentifier)
 4765        {
 4766            switch (columnType)
 767            {
 768                case Serializable.SerializableTypes.String:
 1769                    RemoveColumnInternal(ref m_AllStringColumns, Serializable.SerializableTypes.String,
 770                        columnIdentifier);
 1771                    break;
 772                case Serializable.SerializableTypes.Char:
 0773                    RemoveColumnInternal(ref m_AllCharColumns, Serializable.SerializableTypes.Char, columnIdentifier);
 0774                    break;
 775                case Serializable.SerializableTypes.Bool:
 0776                    RemoveColumnInternal(ref m_AllBoolColumns, Serializable.SerializableTypes.Bool, columnIdentifier);
 0777                    break;
 778                case Serializable.SerializableTypes.SByte:
 0779                    RemoveColumnInternal(ref m_AllSByteColumns, Serializable.SerializableTypes.SByte, columnIdentifier);
 0780                    break;
 781                case Serializable.SerializableTypes.Byte:
 0782                    RemoveColumnInternal(ref m_AllByteColumns, Serializable.SerializableTypes.Byte, columnIdentifier);
 0783                    break;
 784                case Serializable.SerializableTypes.Short:
 0785                    RemoveColumnInternal(ref m_AllShortColumns, Serializable.SerializableTypes.Short, columnIdentifier);
 0786                    break;
 787                case Serializable.SerializableTypes.UShort:
 0788                    RemoveColumnInternal(ref m_AllUShortColumns, Serializable.SerializableTypes.UShort,
 789                        columnIdentifier);
 0790                    break;
 791                case Serializable.SerializableTypes.Int:
 0792                    RemoveColumnInternal(ref m_AllIntColumns, Serializable.SerializableTypes.Int, columnIdentifier);
 0793                    break;
 794                case Serializable.SerializableTypes.UInt:
 0795                    RemoveColumnInternal(ref m_AllUIntColumns, Serializable.SerializableTypes.UInt, columnIdentifier);
 0796                    break;
 797                case Serializable.SerializableTypes.Long:
 0798                    RemoveColumnInternal(ref m_AllLongColumns, Serializable.SerializableTypes.Long, columnIdentifier);
 0799                    break;
 800                case Serializable.SerializableTypes.ULong:
 0801                    RemoveColumnInternal(ref m_AllULongColumns, Serializable.SerializableTypes.ULong, columnIdentifier);
 0802                    break;
 803                case Serializable.SerializableTypes.Float:
 0804                    RemoveColumnInternal(ref m_AllFloatColumns, Serializable.SerializableTypes.Float, columnIdentifier);
 0805                    break;
 806                case Serializable.SerializableTypes.Double:
 0807                    RemoveColumnInternal(ref m_AllDoubleColumns, Serializable.SerializableTypes.Double,
 808                        columnIdentifier);
 0809                    break;
 810                case Serializable.SerializableTypes.Vector2:
 0811                    RemoveColumnInternal(ref m_AllVector2Columns, Serializable.SerializableTypes.Vector2,
 812                        columnIdentifier);
 0813                    break;
 814                case Serializable.SerializableTypes.Vector3:
 0815                    RemoveColumnInternal(ref m_AllVector3Columns, Serializable.SerializableTypes.Vector3,
 816                        columnIdentifier);
 0817                    break;
 818                case Serializable.SerializableTypes.Vector4:
 0819                    RemoveColumnInternal(ref m_AllVector4Columns, Serializable.SerializableTypes.Vector4,
 820                        columnIdentifier);
 0821                    break;
 822                case Serializable.SerializableTypes.Vector2Int:
 0823                    RemoveColumnInternal(ref m_AllVector2IntColumns, Serializable.SerializableTypes.Vector2Int,
 824                        columnIdentifier);
 0825                    break;
 826                case Serializable.SerializableTypes.Vector3Int:
 0827                    RemoveColumnInternal(ref m_AllVector3IntColumns, Serializable.SerializableTypes.Vector3Int,
 828                        columnIdentifier);
 0829                    break;
 830                case Serializable.SerializableTypes.Quaternion:
 0831                    RemoveColumnInternal(ref m_AllQuaternionColumns, Serializable.SerializableTypes.Quaternion,
 832                        columnIdentifier);
 0833                    break;
 834                case Serializable.SerializableTypes.Rect:
 0835                    RemoveColumnInternal(ref m_AllRectColumns, Serializable.SerializableTypes.Rect, columnIdentifier);
 0836                    break;
 837                case Serializable.SerializableTypes.RectInt:
 0838                    RemoveColumnInternal(ref m_AllRectIntColumns, Serializable.SerializableTypes.RectInt,
 839                        columnIdentifier);
 0840                    break;
 841                case Serializable.SerializableTypes.Color:
 0842                    RemoveColumnInternal(ref m_AllColorColumns, Serializable.SerializableTypes.Color, columnIdentifier);
 0843                    break;
 844                case Serializable.SerializableTypes.LayerMask:
 0845                    RemoveColumnInternal(ref m_AllLayerMaskColumns, Serializable.SerializableTypes.LayerMask,
 846                        columnIdentifier);
 0847                    break;
 848                case Serializable.SerializableTypes.Bounds:
 3849                    RemoveColumnInternal(ref m_AllBoundsColumns, Serializable.SerializableTypes.Bounds,
 850                        columnIdentifier);
 3851                    break;
 852                case Serializable.SerializableTypes.BoundsInt:
 0853                    RemoveColumnInternal(ref m_AllBoundsIntColumns, Serializable.SerializableTypes.BoundsInt,
 854                        columnIdentifier);
 0855                    break;
 856                case Serializable.SerializableTypes.Hash128:
 0857                    RemoveColumnInternal(ref m_AllHash128Columns, Serializable.SerializableTypes.Hash128,
 858                        columnIdentifier);
 0859                    break;
 860                case Serializable.SerializableTypes.Gradient:
 0861                    RemoveColumnInternal(ref m_AllGradientColumns, Serializable.SerializableTypes.Gradient,
 862                        columnIdentifier);
 0863                    break;
 864                case Serializable.SerializableTypes.AnimationCurve:
 0865                    RemoveColumnInternal(ref m_AllAnimationCurveColumns, Serializable.SerializableTypes.AnimationCurve,
 866                        columnIdentifier);
 0867                    break;
 868                case Serializable.SerializableTypes.Object:
 0869                    RemoveColumnInternal(ref m_AllObjectRefColumns, Serializable.SerializableTypes.Object,
 870                        columnIdentifier);
 0871                    break;
 872                case Serializable.SerializableTypes.EnumInt:
 0873                    RemoveColumnInternal(ref m_AllEnumIntColumns, Serializable.SerializableTypes.EnumInt,
 874                        columnIdentifier);
 0875                    break;
 876            }
 4877        }
 878
 879        // Set
 880        /// <inheritdoc />
 881        public override ulong SetString(int rowIdentifier, int columnIdentifier, string newValue)
 10882        {
 10883            return SetCell(rowIdentifier, columnIdentifier, ref m_AllStringColumns, newValue);
 10884        }
 885
 886        /// <inheritdoc />
 887        public override ulong SetBool(int rowIdentifier, int columnIdentifier, bool newValue)
 10888        {
 10889            return SetCell(rowIdentifier, columnIdentifier, ref m_AllBoolColumns, newValue);
 10890        }
 891
 892        /// <inheritdoc />
 893        public override ulong SetChar(int rowIdentifier, int columnIdentifier, char newValue)
 10894        {
 10895            return SetCell(rowIdentifier, columnIdentifier, ref m_AllCharColumns, newValue);
 10896        }
 897
 898        /// <inheritdoc />
 899        public override ulong SetSByte(int rowIdentifier, int columnIdentifier, sbyte newValue)
 10900        {
 10901            return SetCell(rowIdentifier, columnIdentifier, ref m_AllSByteColumns, newValue);
 10902        }
 903
 904        /// <inheritdoc />
 905        public override ulong SetByte(int rowIdentifier, int columnIdentifier, byte newValue)
 10906        {
 10907            return SetCell(rowIdentifier, columnIdentifier, ref m_AllByteColumns, newValue);
 10908        }
 909
 910        /// <inheritdoc />
 911        public override ulong SetEnumInt(int rowIdentifier, int columnIdentifier, int newValue)
 0912        {
 0913            return SetCell(rowIdentifier, columnIdentifier, ref m_AllEnumIntColumns, newValue);
 0914        }
 915
 916        /// <inheritdoc />
 917        public override ulong SetShort(int rowIdentifier, int columnIdentifier, short newValue)
 10918        {
 10919            return SetCell(rowIdentifier, columnIdentifier, ref m_AllShortColumns, newValue);
 10920        }
 921
 922        /// <inheritdoc />
 923        public override ulong SetUShort(int rowIdentifier, int columnIdentifier, ushort newValue)
 10924        {
 10925            return SetCell(rowIdentifier, columnIdentifier, ref m_AllUShortColumns, newValue);
 10926        }
 927
 928        /// <inheritdoc />
 929        public override ulong SetInt(int rowIdentifier, int columnIdentifier, int newValue)
 10930        {
 10931            return SetCell(rowIdentifier, columnIdentifier, ref m_AllIntColumns, newValue);
 10932        }
 933
 934        /// <inheritdoc />
 935        public override ulong SetUInt(int rowIdentifier, int columnIdentifier, uint newValue)
 10936        {
 10937            return SetCell(rowIdentifier, columnIdentifier, ref m_AllUIntColumns, newValue);
 10938        }
 939
 940        /// <inheritdoc />
 941        public override ulong SetLong(int rowIdentifier, int columnIdentifier, long newValue)
 10942        {
 10943            return SetCell(rowIdentifier, columnIdentifier, ref m_AllLongColumns, newValue);
 10944        }
 945
 946        /// <inheritdoc />
 947        public override ulong SetULong(int rowIdentifier, int columnIdentifier, ulong newValue)
 10948        {
 10949            return SetCell(rowIdentifier, columnIdentifier, ref m_AllULongColumns, newValue);
 10950        }
 951
 952        /// <inheritdoc />
 953        public override ulong SetFloat(int rowIdentifier, int columnIdentifier, float newValue)
 10954        {
 10955            return SetCell(rowIdentifier, columnIdentifier, ref m_AllFloatColumns, newValue);
 10956        }
 957
 958        /// <inheritdoc />
 959        public override ulong SetDouble(int rowIdentifier, int columnIdentifier, double newValue)
 10960        {
 10961            return SetCell(rowIdentifier, columnIdentifier, ref m_AllDoubleColumns, newValue);
 10962        }
 963
 964        /// <inheritdoc />
 965        public override ulong SetVector2(int rowIdentifier, int columnIdentifier, Vector2 newStruct)
 10966        {
 10967            return SetCell(rowIdentifier, columnIdentifier, ref m_AllVector2Columns, newStruct);
 10968        }
 969
 970        /// <inheritdoc />
 971        public override ulong SetVector3(int rowIdentifier, int columnIdentifier, Vector3 newStruct)
 10972        {
 10973            return SetCell(rowIdentifier, columnIdentifier, ref m_AllVector3Columns, newStruct);
 10974        }
 975
 976        /// <inheritdoc />
 977        public override ulong SetVector4(int rowIdentifier, int columnIdentifier, Vector4 newStruct)
 10978        {
 10979            return SetCell(rowIdentifier, columnIdentifier, ref m_AllVector4Columns, newStruct);
 10980        }
 981
 982        /// <inheritdoc />
 983        public override ulong SetVector2Int(int rowIdentifier, int columnIdentifier, Vector2Int newStruct)
 10984        {
 10985            return SetCell(rowIdentifier, columnIdentifier, ref m_AllVector2IntColumns, newStruct);
 10986        }
 987
 988        /// <inheritdoc />
 989        public override ulong SetVector3Int(int rowIdentifier, int columnIdentifier, Vector3Int newStruct)
 10990        {
 10991            return SetCell(rowIdentifier, columnIdentifier, ref m_AllVector3IntColumns, newStruct);
 10992        }
 993
 994        /// <inheritdoc />
 995        public override ulong SetQuaternion(int rowIdentifier, int columnIdentifier, Quaternion newStruct)
 10996        {
 10997            return SetCell(rowIdentifier, columnIdentifier, ref m_AllQuaternionColumns, newStruct);
 10998        }
 999
 1000        /// <inheritdoc />
 1001        public override ulong SetRect(int rowIdentifier, int columnIdentifier, Rect newStruct)
 101002        {
 101003            return SetCell(rowIdentifier, columnIdentifier, ref m_AllRectColumns, newStruct);
 101004        }
 1005
 1006        /// <inheritdoc />
 1007        public override ulong SetRectInt(int rowIdentifier, int columnIdentifier, RectInt newStruct)
 101008        {
 101009            return SetCell(rowIdentifier, columnIdentifier, ref m_AllRectIntColumns, newStruct);
 101010        }
 1011
 1012        /// <inheritdoc />
 1013        public override ulong SetColor(int rowIdentifier, int columnIdentifier, Color newStruct)
 101014        {
 101015            return SetCell(rowIdentifier, columnIdentifier, ref m_AllColorColumns, newStruct);
 101016        }
 1017
 1018        /// <inheritdoc />
 1019        public override ulong SetLayerMask(int rowIdentifier, int columnIdentifier, LayerMask newStruct)
 101020        {
 101021            return SetCell(rowIdentifier, columnIdentifier, ref m_AllLayerMaskColumns, newStruct);
 101022        }
 1023
 1024        /// <inheritdoc />
 1025        public override ulong SetBounds(int rowIdentifier, int columnIdentifier, Bounds newStruct)
 101026        {
 101027            return SetCell(rowIdentifier, columnIdentifier, ref m_AllBoundsColumns, newStruct);
 101028        }
 1029
 1030        /// <inheritdoc />
 1031        public override ulong SetBoundsInt(int rowIdentifier, int columnIdentifier, BoundsInt newStruct)
 101032        {
 101033            return SetCell(rowIdentifier, columnIdentifier, ref m_AllBoundsIntColumns, newStruct);
 101034        }
 1035
 1036        /// <inheritdoc />
 1037        public override ulong SetHash128(int rowIdentifier, int columnIdentifier, Hash128 newStruct)
 101038        {
 101039            return SetCell(rowIdentifier, columnIdentifier, ref m_AllHash128Columns, newStruct);
 101040        }
 1041
 1042        /// <inheritdoc />
 1043        public override ulong SetGradient(int rowIdentifier, int columnIdentifier, Gradient newObject)
 101044        {
 101045            return SetCell(rowIdentifier, columnIdentifier, ref m_AllGradientColumns, newObject);
 101046        }
 1047
 1048        /// <inheritdoc />
 1049        public override ulong SetAnimationCurve(int rowIdentifier, int columnIdentifier, AnimationCurve newObject)
 101050        {
 101051            return SetCell(rowIdentifier, columnIdentifier, ref m_AllAnimationCurveColumns, newObject);
 101052        }
 1053
 1054        /// <inheritdoc />
 1055        public override ulong SetObject(int rowIdentifier, int columnIdentifier, Object newObject)
 101056        {
 101057            return SetCell(rowIdentifier, columnIdentifier, ref m_AllObjectRefColumns, newObject);
 101058        }
 1059
 1060        /// <inheritdoc />
 1061        public override void SetTypeNameForColumn(int columnIdentifier, string assemblyQualifiedName)
 01062        {
 01063            ref ColumnEntry entry = ref m_ColumnIdentifierToDenseIndexMap[columnIdentifier];
 1064
 01065            if (entry.ColumnType == Serializable.SerializableTypes.Object)
 01066            {
 01067                m_AllObjectRefTypeNames[entry.ColumnDenseIndex] = assemblyQualifiedName;
 01068            }
 01069            else if (entry.ColumnType == Serializable.SerializableTypes.EnumInt)
 01070            {
 01071                m_AllEnumIntTypeNames[entry.ColumnDenseIndex] = assemblyQualifiedName;
 01072            }
 1073            else
 01074            {
 01075                throw new NotSupportedException(
 1076                    "Type name overloads are only supported for types inheriting from UnityEngine.Object or from System.
 1077            }
 01078        }
 1079
 1080        /// <inheritdoc />
 1081        public override string GetTypeNameForColumn(int columnIdentifier)
 01082        {
 01083            ref ColumnEntry entry = ref m_ColumnIdentifierToDenseIndexMap[columnIdentifier];
 01084            int denseIndex = entry.ColumnDenseIndex;
 1085
 01086            if (entry.ColumnType == Serializable.SerializableTypes.Object)
 01087            {
 01088                return m_AllObjectRefTypeNames[entry.ColumnDenseIndex];
 1089            }
 1090
 01091            if (entry.ColumnType == Serializable.SerializableTypes.EnumInt)
 01092            {
 01093                return m_AllEnumIntTypeNames[entry.ColumnDenseIndex];
 1094            }
 1095
 01096            throw new NotSupportedException(
 1097                "Type name overloads are only supported for types inheriting from UnityEngine.Object or from System.Enum
 01098        }
 1099
 1100        // Get
 1101        /// <inheritdoc />
 1102        public override string GetString(int rowIdentifier, int columnIdentifier)
 101103        {
 101104            return GetCell(rowIdentifier, columnIdentifier, ref m_AllStringColumns);
 101105        }
 1106
 1107        /// <inheritdoc />
 1108        public override bool GetBool(int rowIdentifier, int columnIdentifier)
 101109        {
 101110            return GetCell(rowIdentifier, columnIdentifier, ref m_AllBoolColumns);
 101111        }
 1112
 1113        /// <inheritdoc />
 1114        public override char GetChar(int rowIdentifier, int columnIdentifier)
 101115        {
 101116            return GetCell(rowIdentifier, columnIdentifier, ref m_AllCharColumns);
 101117        }
 1118
 1119        /// <inheritdoc />
 1120        public override int GetEnumInt(int rowIdentifier, int columnIdentifier)
 01121        {
 01122            return GetCell(rowIdentifier, columnIdentifier, ref m_AllEnumIntColumns);
 01123        }
 1124
 1125        /// <inheritdoc />
 1126        public override sbyte GetSByte(int rowIdentifier, int columnIdentifier)
 101127        {
 101128            return GetCell(rowIdentifier, columnIdentifier, ref m_AllSByteColumns);
 101129        }
 1130
 1131        /// <inheritdoc />
 1132        public override byte GetByte(int rowIdentifier, int columnIdentifier)
 101133        {
 101134            return GetCell(rowIdentifier, columnIdentifier, ref m_AllByteColumns);
 101135        }
 1136
 1137        /// <inheritdoc />
 1138        public override short GetShort(int rowIdentifier, int columnIdentifier)
 101139        {
 101140            return GetCell(rowIdentifier, columnIdentifier, ref m_AllShortColumns);
 101141        }
 1142
 1143        /// <inheritdoc />
 1144        public override ushort GetUShort(int rowIdentifier, int columnIdentifier)
 101145        {
 101146            return GetCell(rowIdentifier, columnIdentifier, ref m_AllUShortColumns);
 101147        }
 1148
 1149        /// <inheritdoc />
 1150        public override int GetInt(int rowIdentifier, int columnIdentifier)
 101151        {
 101152            return GetCell(rowIdentifier, columnIdentifier, ref m_AllIntColumns);
 101153        }
 1154
 1155        /// <inheritdoc />
 1156        public override uint GetUInt(int rowIdentifier, int columnIdentifier)
 101157        {
 101158            return GetCell(rowIdentifier, columnIdentifier, ref m_AllUIntColumns);
 101159        }
 1160
 1161        /// <inheritdoc />
 1162        public override long GetLong(int rowIdentifier, int columnIdentifier)
 101163        {
 101164            return GetCell(rowIdentifier, columnIdentifier, ref m_AllLongColumns);
 101165        }
 1166
 1167        /// <inheritdoc />
 1168        public override ulong GetULong(int rowIdentifier, int columnIdentifier)
 101169        {
 101170            return GetCell(rowIdentifier, columnIdentifier, ref m_AllULongColumns);
 101171        }
 1172
 1173        /// <inheritdoc />
 1174        public override float GetFloat(int rowIdentifier, int columnIdentifier)
 101175        {
 101176            return GetCell(rowIdentifier, columnIdentifier, ref m_AllFloatColumns);
 101177        }
 1178
 1179        /// <inheritdoc />
 1180        public override double GetDouble(int rowIdentifier, int columnIdentifier)
 101181        {
 101182            return GetCell(rowIdentifier, columnIdentifier, ref m_AllDoubleColumns);
 101183        }
 1184
 1185        /// <inheritdoc />
 1186        public override Vector2 GetVector2(int rowIdentifier, int columnIdentifier)
 101187        {
 101188            return GetCell(rowIdentifier, columnIdentifier, ref m_AllVector2Columns);
 101189        }
 1190
 1191        /// <inheritdoc />
 1192        public override Vector3 GetVector3(int rowIdentifier, int columnIdentifier)
 101193        {
 101194            return GetCell(rowIdentifier, columnIdentifier, ref m_AllVector3Columns);
 101195        }
 1196
 1197        /// <inheritdoc />
 1198        public override Vector4 GetVector4(int rowIdentifier, int columnIdentifier)
 101199        {
 101200            return GetCell(rowIdentifier, columnIdentifier, ref m_AllVector4Columns);
 101201        }
 1202
 1203        /// <inheritdoc />
 1204        public override Vector2Int GetVector2Int(int rowIdentifier, int columnIdentifier)
 101205        {
 101206            return GetCell(rowIdentifier, columnIdentifier, ref m_AllVector2IntColumns);
 101207        }
 1208
 1209        /// <inheritdoc />
 1210        public override Vector3Int GetVector3Int(int rowIdentifier, int columnIdentifier)
 101211        {
 101212            return GetCell(rowIdentifier, columnIdentifier, ref m_AllVector3IntColumns);
 101213        }
 1214
 1215        /// <inheritdoc />
 1216        public override Quaternion GetQuaternion(int rowIdentifier, int columnIdentifier)
 101217        {
 101218            return GetCell(rowIdentifier, columnIdentifier, ref m_AllQuaternionColumns);
 101219        }
 1220
 1221        /// <inheritdoc />