示例#1
0
        /// <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]);
        }
示例#2
0
        /// <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);
            }
        }