コード例 #1
0
        /// <inheritdoc />
        public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false)
        {
            if (Reading)
            {
                return;
            }

            var value = func.Invoke();

            // don't write if value is null or default
            if (!alwaysWrite && IsValueDefault(name, value, defaultValue, WithFormat <T> .NoFormat))
            {
                return;
            }

            var key = name;
            var val = value == null?TypeToNode(defaultValue !) : TypeToNode(value);

            // write the concrete type tag
            if (typeof(T).IsAbstract || typeof(T).IsInterface)
            {
                var concreteType = value == null ? defaultValue !.GetType() : value.GetType();
                val.Tag = $"!type:{concreteType.Name}";
            }

            WriteMap !.Add(key, val);
        }
コード例 #2
0
 /// <summary>
 ///     It's <see cref="DataReadFunction" /> and <see cref="DataWriteFunction" /> in one, so you don't need to pass name and default twice!
 ///     Marvelous!
 /// </summary>
 public virtual void DataReadWriteFunction <T>(string name, T defaultValue, ReadFunctionDelegate <T> readFunc,
                                               WriteFunctionDelegate <T> writeFunc, bool alwaysWrite = false)
 {
     if (Reading)
     {
         DataReadFunction(name, defaultValue, readFunc);
     }
     else
     {
         DataWriteFunction(name, defaultValue, writeFunc, alwaysWrite);
     }
 }
コード例 #3
0
        /// <inheritdoc />
        public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false)
        {
            if (Reading)
            {
                return;
            }

            var value = func.Invoke();

            // don't write if value is null or default
            if (!alwaysWrite && IsValueDefault(name, value, defaultValue))
            {
                return;
            }

            var key = name;
            var val = value == null?TypeToNode(defaultValue) : TypeToNode(value);

            WriteMap.Add(key, val);
        }
コード例 #4
0
        /// <inheritdoc />
        public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false)
        {
            if (Reading)
            {
                return;
            }

            var value = func.Invoke();

            // don't write if value is null or default
            if (!alwaysWrite && IsValueDefault(name, value, defaultValue, WithFormat <T> .NoFormat))
            {
                return;
            }

            var key = name;
            var val = value == null?TypeToNode(defaultValue !) : TypeToNode(value);

            // write the concrete type tag
            AssignTag(typeof(T), value, defaultValue, val);

            WriteMap !.Add(key, val);
        }
コード例 #5
0
 /// <summary>
 ///     Provides a delegate to write custom data to a more simpler type that can be mapped to mediums like YAML.
 ///     This is useful if your data does not map 1:1 to the prototype.
 /// </summary>
 /// <param name="name">The name of the field in the serialization medium. Most likely the name in YAML.</param>
 /// <param name="defaultValue">The default value. Used to check if writing can be skipped when <paramref name="alwaysWrite" /> is true.</param>
 /// <param name="func">A delegate that produces simpler data based on the internal state of the caller.</param>
 /// <param name="alwaysWrite">If true, data will always be written even if it matches <paramref name="defaultValue" />.</param>
 /// <typeparam name="T">The type of the data that will be written to the storage medium.</typeparam>
 public abstract void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false);
コード例 #6
0
 public override void DataWriteFunction <T>(string name, T defaultValue, WriteFunctionDelegate <T> func, bool alwaysWrite = false)
 {
 }
コード例 #7
0
 public static extern CurlCode EasySetOpt64(CurlEasyHandle handle, CurlOption option, WriteFunctionDelegate value);