コード例 #1
0
ファイル: FieldCodec.cs プロジェクト: NikkittaP/osg_pack
        /// <summary>
        /// Retrieves a codec suitable for a group field with the given tag.
        /// </summary>
        /// <param name="startTag">The start group tag.</param>
        /// <param name="endTag">The end group tag.</param>
        /// <param name="parser">A parser to use for the group message type.</param>
        /// <returns>A codec for given tag</returns>
        public static FieldCodec <T> ForGroup <T>(uint startTag, uint endTag, MessageParser <T> parser) where T : class, IMessage <T>
        {
            return(new FieldCodec <T>(input => { T message = parser.CreateTemplate(); input.ReadGroup(message); return message; },
                                      (output, value) => output.WriteGroup(value), (CodedInputStream i, ref T v) => {
                if (v == null)
                {
                    v = parser.CreateTemplate();
                }

                i.ReadGroup(v);
            },
                                      (ref T v, T v2) =>
            {
                if (v2 == null)
                {
                    return v == null;
                }
                else if (v == null)
                {
                    v = v2.Clone();
                }
                else
                {
                    v.MergeFrom(v2);
                }
                return true;
            }, message => CodedOutputStream.ComputeGroupSize(message), startTag, endTag));
        }
コード例 #2
0
        public static T ReadMessage <T>(this CodedInputStream stream, MessageParser <T> parser)
            where T : IMessage <T>
        {
            var message = parser.CreateTemplate();

            stream.ReadMessage(message);
            return(message);
        }
コード例 #3
0
ファイル: FieldCodec.cs プロジェクト: Denticle/docker-base
        /// <summary>
        /// Retrieves a codec suitable for a message field with the given tag.
        /// </summary>
        /// <param name="tag">The tag.</param>
        /// <param name="parser">A parser to use for the message type.</param>
        /// <returns>A codec for the given tag.</returns>
        public static FieldCodec <T> ForMessage <T>(uint tag, MessageParser <T> parser) where T : class, IMessage <T>
        {
            return(new FieldCodec <T>(
                       (ref ParseContext ctx) =>
            {
                T message = parser.CreateTemplate();
                ctx.ReadMessage(message);
                return message;
            },
                       (ref WriteContext output, T value) => output.WriteMessage(value),
                       (ref ParseContext ctx, ref T v) =>
            {
                if (v == null)
                {
                    v = parser.CreateTemplate();
                }

                ctx.ReadMessage(v);
            },
                       (ref T v, T v2) =>
            {
                if (v2 == null)
                {
                    return false;
                }
                else if (v == null)
                {
                    v = v2.Clone();
                }
                else
                {
                    v.MergeFrom(v2);
                }
                return true;
            },
                       message => CodedOutputStream.ComputeMessageSize(message), tag));
        }
コード例 #4
0
ファイル: FieldCodec.cs プロジェクト: drolean/Arctium-RE
        public static FieldCodec <T> ForMessage <T>(uint tag, MessageParser <T> parser) where T : object, IMessage <T>
        {
            Func <CodedInputStream, T> arg_56_0 = delegate(CodedInputStream input)
            {
                T t = parser.CreateTemplate();
                input.ReadMessage(t);
                return(t);
            };
            Action <CodedOutputStream, T> arg_56_1;

            if ((arg_56_1 = FieldCodec.__c__16 <T> .__9__16_1) == null)
            {
                arg_56_1 = (FieldCodec.__c__16 <T> .__9__16_1 = new Action <CodedOutputStream, T>(FieldCodec.__c__16 <T> .__9.< ForMessage > b__16_1));
            }
            Func <T, int> arg_56_2;

            if ((arg_56_2 = FieldCodec.__c__16 <T> .__9__16_2) == null)
            {
                arg_56_2 = (FieldCodec.__c__16 <T> .__9__16_2 = new Func <T, int>(FieldCodec.__c__16 <T> .__9.< ForMessage > b__16_2));
            }
            return(new FieldCodec <T>(arg_56_0, arg_56_1, arg_56_2, tag));
        }
コード例 #5
0
 /// <summary>
 /// Retrieves a codec suitable for a message field with the given tag.
 /// </summary>
 /// <param name="tag">The tag.</param>
 /// <param name="parser">A parser to use for the message type.</param>
 /// <returns>A codec for the given tag.</returns>
 public static FieldCodec <T> ForMessage <T>(uint tag, MessageParser <T> parser) where T : IMessage <T>
 {
     return(new FieldCodec <T>(input => { T message = parser.CreateTemplate(); input.ReadMessage(message); return message; },
                               (output, value) => output.WriteMessage(value), message => CodedOutputStream.ComputeMessageSize(message), tag));
 }
コード例 #6
0
 /// <summary>
 /// Retrieves a codec suitable for a group field with the given tag.
 /// </summary>
 /// <param name="startTag">The start group tag.</param>
 /// <param name="endTag">The end group tag.</param>
 /// <param name="parser">A parser to use for the group message type.</param>
 /// <returns>A codec for given tag</returns>
 public static FieldCodec <T> ForGroup <T>(uint startTag, uint endTag, MessageParser <T> parser) where T : IMessage <T>
 {
     return(new FieldCodec <T>(input => { T message = parser.CreateTemplate(); input.ReadGroup(message); return message; },
                               (output, value) => output.WriteGroup(value), message => CodedOutputStream.ComputeGroupSize(message), startTag, endTag));
 }