aboutsummaryrefslogtreecommitdiff
path: root/csharp/ProtocolBuffers/GeneratedBuilder.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2008-08-14 20:35:14 +0100
committerJon Skeet <skeet@pobox.com>2008-08-14 20:35:14 +0100
commit2b61cbf408b16579d0a4e247e91c465d6228d222 (patch)
tree5c6868727afbfab5bdb83bd62d30e523a7feca94 /csharp/ProtocolBuffers/GeneratedBuilder.cs
parentde21d2c92c15387d64f16d4b20defb010caac299 (diff)
downloadprotobuf-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.cs123
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);
}
}