Example #1
0
        public T ReadValue(IValueReader valueReader)
        {
            if (valueReader is ISingleThreadOptimize)
            {
                var current_cache = thread_cache;

                if (current_cache == null)
                {
                    InitializeInstance(ref current_cache);
                }

                if (current_cache.IsUsed)
                {
                    goto Default;
                }

                current_cache.IsUsed = true;

                current_cache.Instance.content = default;

                ReadValue(valueReader, current_cache.Instance);

                current_cache.IsUsed = false;

                return(current_cache.Instance.content);
            }

Default:

            var fastObjectRW = FastObjectRW <T> .Create();

            ReadValue(valueReader, fastObjectRW);

            return(fastObjectRW.content);
        }
Example #2
0
        public T ReadValue(IValueReader valueReader)
        {
            var fastObjectRW = FastObjectRW <T> .Create();

            valueReader.ReadObject(fastObjectRW);

            return(fastObjectRW.Content);
        }
Example #3
0
        public T ReadValue(IValueReader valueReader)
        {
            var writer = FastObjectRW <T> .Create();

            valueReader.ReadObject(writer);

            return(writer.Content);
        }
Example #4
0
        /// <summary>
        /// 使用 <see cref="FastObjectRW{T}"/> 往值写入器中写入一个对象。
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="valueWriter">值写入器</param>
        /// <param name="obj">对象</param>
        public static void FastWriteObject <T>(this IValueWriter valueWriter, T obj)
        {
            var rw = FastObjectRW <T> .Create();

            rw.content = obj;

            valueWriter.WriteObject(rw);
        }
Example #5
0
        /// <summary>
        /// 使用 <see cref="FastObjectRW{T}"/> 从值读取器中读取一个对象。
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="valueReader">值读取器</param>
        /// <returns>返回一个对象</returns>
        public static T FastReadObject <T>(this IValueReader valueReader)
        {
            var rw = FastObjectRW <T> .Create();

            valueReader.ReadObject(rw);

            return(rw.content);
        }
Example #6
0
        public void InitializeInstance(ref InternalInstance <FastObjectRW <T> > current_cache)
        {
            current_cache = new InternalInstance <FastObjectRW <T> >
            {
                Instance = FastObjectRW <T> .Create()
            };

            thread_cache = current_cache;
        }
Example #7
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */
            if (CheckChildrenInstance && Int64TypeHandle != (long)TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            if (valueWriter is ISingleThreadOptimize)
            {
                var current_cache = thread_cache;

                if (current_cache == null)
                {
                    InitializeInstance(ref current_cache);
                }

                if (current_cache.IsUsed)
                {
                    goto Default;
                }

                current_cache.IsUsed = true;

                current_cache.Instance.Initialize(value);

                valueWriter.WriteObject(current_cache.Instance);

                current_cache.IsUsed = false;

                return;
            }

Default:

            var fastObjectRW = FastObjectRW <T> .Create();

            fastObjectRW.Initialize(value);

            valueWriter.WriteObject(fastObjectRW);
        }
Example #8
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */
            if (CheckChildrenInstance && Int64TypeHandle != (long)TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            var fastObjectRW = FastObjectRW <T> .Create();

            fastObjectRW.Initialize(value);

            valueWriter.WriteObject(fastObjectRW);
        }
Example #9
0
        public void WriteValue(IValueWriter valueWriter, T value)
        {
            if (value == null)
            {
                valueWriter.DirectWrite(null);

                return;
            }

            /* 父类引用,子类实例时使用 Type 获取写入器。 */
            if (CheckDerivedInstance && TypeHandle != TypeHelper.GetTypeHandle(value))
            {
                ValueInterface.GetInterface(value).Write(valueWriter, value);

                return;
            }

            var reader = FastObjectRW <T> .Create();

            reader.Initialize(value);

            valueWriter.WriteObject(reader);
        }