From 17344273beac921b096c61738fbd1a262e944e33 Mon Sep 17 00:00:00 2001 From: Michael Condillac Date: Wed, 15 Apr 2020 17:53:42 +0700 Subject: [PATCH] Made IAppendable methods an explicit IAppendable declaration and ensured consistency using count instead of length in Append overloads --- .../Analysis/Util/OpenStringBuilder.cs | 83 ++++++++++++++++--- 1 file changed, 71 insertions(+), 12 deletions(-) diff --git a/src/Lucene.Net.Analysis.Common/Analysis/Util/OpenStringBuilder.cs b/src/Lucene.Net.Analysis.Common/Analysis/Util/OpenStringBuilder.cs index 0f41a0f998..9e2a099ec0 100644 --- a/src/Lucene.Net.Analysis.Common/Analysis/Util/OpenStringBuilder.cs +++ b/src/Lucene.Net.Analysis.Common/Analysis/Util/OpenStringBuilder.cs @@ -26,12 +26,12 @@ namespace Lucene.Net.Analysis.Util /// /// A StringBuilder that allows one to access the array. /// - public class OpenStringBuilder : ICharSequence + public class OpenStringBuilder : IAppendable, ICharSequence { protected char[] m_buf; protected int m_len; - public OpenStringBuilder() + public OpenStringBuilder() : this(32) { } @@ -73,15 +73,15 @@ public virtual void Set(char[] arr, int end) public virtual int Capacity => m_buf.Length; - public virtual OpenStringBuilder Append(ICharSequence csq) + public virtual OpenStringBuilder Append(ICharSequence csq) { return Append(csq, 0, csq.Length); } - public virtual OpenStringBuilder Append(ICharSequence csq, int startIndex, int length) // LUCENENET TODO: API - change to startIndex/length to match .NET + public virtual OpenStringBuilder Append(ICharSequence csq, int startIndex, int count) // LUCENENET TODO: API - change to startIndex/length to match .NET { - EnsureCapacity(length - startIndex); - for (int i = startIndex; i < length; i++) + EnsureCapacity(count - startIndex); + for (int i = startIndex; i < count; i++) { UnsafeWrite(csq[i]); } @@ -95,10 +95,10 @@ public virtual OpenStringBuilder Append(string csq) } // LUCENENET specific - overload for string (more common in .NET than ICharSequence) - public virtual OpenStringBuilder Append(string csq, int startIndex, int length) // LUCENENET TODO: API - change to startIndex/length to match .NET + public virtual OpenStringBuilder Append(string csq, int startIndex, int count) // LUCENENET TODO: API - change to startIndex/length to match .NET { - EnsureCapacity(length - startIndex); - for (int i = startIndex; i < length; i++) + EnsureCapacity(count - startIndex); + for (int i = startIndex; i < count; i++) { UnsafeWrite(csq[i]); } @@ -112,10 +112,10 @@ public virtual OpenStringBuilder Append(StringBuilder csq) } // LUCENENET specific - overload for StringBuilder - public virtual OpenStringBuilder Append(StringBuilder csq, int startIndex, int length) // LUCENENET TODO: API - change to startIndex/length to match .NET + public virtual OpenStringBuilder Append(StringBuilder csq, int startIndex, int count) // LUCENENET TODO: API - change to startIndex/length to match .NET { - EnsureCapacity(length - startIndex); - for (int i = startIndex; i < length; i++) + EnsureCapacity(count - startIndex); + for (int i = startIndex; i < count; i++) { UnsafeWrite(csq[i]); } @@ -128,6 +128,20 @@ public virtual OpenStringBuilder Append(char c) return this; } + public virtual OpenStringBuilder Append(char[] value) + { + Write(value); + return this; + } + public virtual OpenStringBuilder Append(char[] value, int startIndex, int count) + { + EnsureCapacity(count - startIndex); + for (int i = startIndex; i < count; i++) + { + UnsafeWrite(value[i]); + } + return this; + } // LUCENENET specific - removed (replaced with this[]) //public virtual char CharAt(int index) //{ @@ -270,5 +284,50 @@ public override string ToString() { return new string(m_buf, 0, Length); } + + IAppendable IAppendable.Append(char value) + { + return Append(value); + } + + IAppendable IAppendable.Append(string value) + { + return Append(value); + } + + IAppendable IAppendable.Append(string value, int startIndex, int count) + { + return Append(value, startIndex, count); + } + + IAppendable IAppendable.Append(StringBuilder value) + { + return Append(value); + } + + IAppendable IAppendable.Append(StringBuilder value, int startIndex, int count) + { + return Append(value, startIndex, count); + } + + IAppendable IAppendable.Append(char[] value) + { + return Append(value); + } + + IAppendable IAppendable.Append(char[] value, int startIndex, int count) + { + return Append(value, startIndex, count); + } + + IAppendable IAppendable.Append(ICharSequence value) + { + return Append(value); + } + + IAppendable IAppendable.Append(ICharSequence value, int startIndex, int count) + { + return Append(value, startIndex, count); + } } } \ No newline at end of file