diff options
author | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:35:14 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2008-08-14 20:35:14 +0100 |
commit | 2b61cbf408b16579d0a4e247e91c465d6228d222 (patch) | |
tree | 5c6868727afbfab5bdb83bd62d30e523a7feca94 /csharp/ProtocolBuffers/GeneratedBuilder.cs | |
parent | de21d2c92c15387d64f16d4b20defb010caac299 (diff) | |
download | protobuf-2b61cbf408b16579d0a4e247e91c465d6228d222.tar.gz protobuf-2b61cbf408b16579d0a4e247e91c465d6228d222.tar.bz2 protobuf-2b61cbf408b16579d0a4e247e91c465d6228d222.zip |
Autogeneration now hopefully close to correct. Library builds! (Not finished though...)
Diffstat (limited to 'csharp/ProtocolBuffers/GeneratedBuilder.cs')
-rw-r--r-- | csharp/ProtocolBuffers/GeneratedBuilder.cs | 123 |
1 files changed, 78 insertions, 45 deletions
diff --git a/csharp/ProtocolBuffers/GeneratedBuilder.cs b/csharp/ProtocolBuffers/GeneratedBuilder.cs index a98dbccc..f11ed452 100644 --- a/csharp/ProtocolBuffers/GeneratedBuilder.cs +++ b/csharp/ProtocolBuffers/GeneratedBuilder.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using Google.ProtocolBuffers.Collections; using Google.ProtocolBuffers.Descriptors; +using System.IO; namespace Google.ProtocolBuffers { /// <summary> @@ -17,7 +18,7 @@ namespace Google.ProtocolBuffers { /// <summary> /// Returns the message being built at the moment. /// </summary> - protected abstract GeneratedMessage<TMessage,TBuilder> MessageBeingBuilt { get; } + protected abstract TMessage MessageBeingBuilt { get; } public override bool Initialized { get { return MessageBeingBuilt.IsInitialized; } @@ -40,6 +41,29 @@ namespace Google.ProtocolBuffers { } } + /// <summary> + /// Adds all of the specified values to the given collection. + /// </summary> + protected void AddRange<T>(IEnumerable<T> source, IList<T> destination) { + List<T> list = destination as List<T>; + if (list != null) { + list.AddRange(source); + } else { + foreach (T element in source) { + destination.Add(element); + } + } + } + + /// <summary> + /// Called by derived classes to parse an unknown field. + /// </summary> + /// <returns>true unless the tag is an end-group tag</returns> + protected bool ParseUnknownField(CodedInputStream input, UnknownFieldSet.Builder unknownFields, + ExtensionRegistry extensionRegistry, uint tag) { + return unknownFields.MergeFieldFrom(tag, input); + } + public override MessageDescriptor DescriptorForType { get { return MessageBeingBuilt.DescriptorForType; } } @@ -73,8 +97,8 @@ namespace Google.ProtocolBuffers { get { return DefaultInstanceForType; } } - protected override IBuilder CreateBuilderForFieldImpl(FieldDescriptor field) { - return CreateBuilderForField(field); + public override IBuilder CreateBuilderForField(FieldDescriptor field) { + return MessageBeingBuilt.InternalFieldAccessors[field].CreateBuilder(); } protected override IBuilder ClearFieldImpl(FieldDescriptor field) { @@ -85,69 +109,78 @@ namespace Google.ProtocolBuffers { return AddRepeatedField(field, value); } - public new abstract IBuilder<TMessage> Clear(); - - public IBuilder<TMessage> MergeFrom(IMessage<TMessage> other) { - throw new NotImplementedException(); - } - - public abstract TMessage Build(); - - public abstract TMessage BuildPartial(); - - public abstract IBuilder<TMessage> Clone(); - - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(CodedInputStream input) { - throw new NotImplementedException(); - } - - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(CodedInputStream input, ExtensionRegistry extensionRegistry) { - throw new NotImplementedException(); - } - - public TMessage DefaultInstanceForType { - get { throw new NotImplementedException(); } - } - - public IBuilder CreateBuilderForField(FieldDescriptor field) { - throw new NotImplementedException(); - } - public IBuilder<TMessage> ClearField(FieldDescriptor field) { MessageBeingBuilt.InternalFieldAccessors[field].Clear(this); return this; } + // FIXME: Implement! + public virtual IBuilder<TMessage> MergeFrom(TMessage other) { return this; } + public virtual IBuilder<TMessage> MergeUnknownFields(UnknownFieldSet unknownFields) { return this; } + public IBuilder<TMessage> AddRepeatedField(FieldDescriptor field, object value) { + MessageBeingBuilt.InternalFieldAccessors[field].AddRepeated(this, value); return this; } - public new IBuilder<TMessage> MergeUnknownFields(UnknownFieldSet unknownFields) { - throw new NotImplementedException(); + public IBuilder<TMessage> MergeFrom(ByteString data) { + ((IBuilder) this).MergeFrom(data); + return this; } - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(ByteString data) { - throw new NotImplementedException(); + public IBuilder<TMessage> MergeFrom(ByteString data, ExtensionRegistry extensionRegistry) { + ((IBuilder) this).MergeFrom(data, extensionRegistry); + return this; } - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(ByteString data, ExtensionRegistry extensionRegistry) { - throw new NotImplementedException(); + public IBuilder<TMessage> MergeFrom(byte[] data) { + ((IBuilder) this).MergeFrom(data); + return this; } - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(byte[] data) { - throw new NotImplementedException(); + public IBuilder<TMessage> MergeFrom(byte[] data, ExtensionRegistry extensionRegistry) { + ((IBuilder) this).MergeFrom(data, extensionRegistry); + return this; + } + + public IBuilder<TMessage> MergeFrom(Stream input) { + ((IBuilder) this).MergeFrom(input); + return this; } - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(byte[] data, ExtensionRegistry extensionRegistry) { - throw new NotImplementedException(); + public IBuilder<TMessage> MergeFrom(Stream input, ExtensionRegistry extensionRegistry) { + ((IBuilder) this).MergeFrom(input, extensionRegistry); + return this; } - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(System.IO.Stream input) { - throw new NotImplementedException(); + /// <summary> + /// Like Build(), but will wrap UninitializedMessageException in + /// InvalidProtocolBufferException. + /// TODO(jonskeet): This used to be generated for each class. Find out why. + /// </summary> + public TMessage BuildParsed() { + if (!Initialized) { + throw new UninitializedMessageException(MessageBeingBuilt).AsInvalidProtocolBufferException(); + } + return BuildPartial(); } - IBuilder<TMessage> IBuilder<TMessage>.MergeFrom(System.IO.Stream input, ExtensionRegistry extensionRegistry) { - throw new NotImplementedException(); + /// <summary> + /// Implementation of <see cref="IBuilder{T}.Build" />. + /// TODO(jonskeet): This used to be generated for each class. Find out why. + /// </summary> + public TMessage Build() { + if (!Initialized) { + throw new UninitializedMessageException(MessageBeingBuilt); + } + return BuildPartial(); } + + public abstract TMessage BuildPartial(); + public abstract IBuilder<TMessage> Clone(); + public abstract new IBuilder<TMessage> Clear(); + public abstract TMessage DefaultInstanceForType { get; } + public abstract IBuilder<TMessage> MergeFrom(CodedInputStream input); + public abstract IBuilder<TMessage> MergeFrom(CodedInputStream input, ExtensionRegistry extensionRegistry); } } |