/// <summary> /// Converts runtime type full name to numeric ID /// </summary> /// <param name="typeFullName">Runtime type full name</param> /// <returns>Object type ID</returns> private int GetObjectTypeID(string?typeFullName) { if (typeFullName == null) { throw new ArgumentNullException(nameof(typeFullName)); } if (!TypeCache.ContainsKey(typeFullName)) { TypeCache.Add(typeFullName, ++TypeGenID); TypeCacheBack.Add(TypeGenID, typeFullName); } return(TypeCache[typeFullName]); }
/// <summary> /// Reads table of used runtime types from reader /// </summary> /// <param name="typeTableReader">Reader</param> public void ReadTypeTable(IReader typeTableReader) { TypeCache.Clear(); TypeCacheBack.Clear(); // ReSharper disable UnusedVariable byte typeTableVersion = typeTableReader.ReadByte("#typeTableSerializationVersion"); // ReSharper restore UnusedVariable int typeTableCount = typeTableReader.ReadInt32("#typeTableCount"); for (int i = 0; i < typeTableCount; i++) { string key = $"#typeTable_Item_{i}"; string typeFullName = typeTableReader.ReadString(key); int typeID = typeTableReader.ReadInt32($"#typeTable_Item_ID_{i}"); TypeCache.Add(typeFullName, typeID); TypeCacheBack.Add(typeID, typeFullName); } }