API: Lucene.Net.Support: Added StringBuilderCharSequenceWrapper class and StringBuilder.ToCharSequence() extension method.
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/67199687 Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/67199687 Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/67199687 Branch: refs/heads/master Commit: 67199687c0f97482307d6b4e6b22482458d48ec9 Parents: a343b98 Author: Shad Storhaug <[email protected]> Authored: Thu Oct 19 22:23:00 2017 +0700 Committer: Shad Storhaug <[email protected]> Committed: Thu Oct 19 23:16:55 2017 +0700 ---------------------------------------------------------------------- .../Support/StringBuilderCharSequenceWrapper.cs | 74 ++++++++++++++++++++ .../Support/StringBuilderExtensions.cs | 9 +++ 2 files changed, 83 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucenenet/blob/67199687/src/Lucene.Net/Support/StringBuilderCharSequenceWrapper.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net/Support/StringBuilderCharSequenceWrapper.cs b/src/Lucene.Net/Support/StringBuilderCharSequenceWrapper.cs new file mode 100644 index 0000000..19ecfff --- /dev/null +++ b/src/Lucene.Net/Support/StringBuilderCharSequenceWrapper.cs @@ -0,0 +1,74 @@ +using System; +using System.Text; + +namespace Lucene.Net.Support +{ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /// <summary> + /// An adapter for <see cref="StringBuilder"/> that implements <see cref="ICharSequence"/> + /// </summary> + public class StringBuilderCharSequenceWrapper : ICharSequence + { + private readonly StringBuilder value; + + public StringBuilderCharSequenceWrapper(StringBuilder wrappedValue) + { + if (wrappedValue == null) + throw new ArgumentNullException("wrappedValue"); + + this.value = wrappedValue; + } + + // LUCENENET specific - added to .NETify + public char this[int index] + { + get { return value[index]; } + } + + public int Length + { + get { return value.Length; } + } + + public ICharSequence SubSequence(int start, int end) + { + return new StringCharSequenceWrapper(value.ToString(start, end - start)); + } + + public override int GetHashCode() + { + return value.GetHashCode(); + } + + public override bool Equals(object obj) + { + if (obj == null) + return false; + if (!(obj is StringBuilder)) + return false; + + return value.Equals(obj as StringBuilder); + } + + public override string ToString() + { + return value.ToString(); + } + } +} http://git-wip-us.apache.org/repos/asf/lucenenet/blob/67199687/src/Lucene.Net/Support/StringBuilderExtensions.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net/Support/StringBuilderExtensions.cs b/src/Lucene.Net/Support/StringBuilderExtensions.cs index 6b02511..d6d543b 100644 --- a/src/Lucene.Net/Support/StringBuilderExtensions.cs +++ b/src/Lucene.Net/Support/StringBuilderExtensions.cs @@ -216,5 +216,14 @@ namespace Lucene.Net.Support return -1; } + + /// <summary> + /// Convenience method to wrap a string in a <see cref="StringBuilderCharSequenceWrapper"/> + /// so a <see cref="StringBuilder"/> can be used as <see cref="ICharSequence"/> in .NET. + /// </summary> + public static ICharSequence ToCharSequence(this StringBuilder text) + { + return new StringBuilderCharSequenceWrapper(text); + } } } \ No newline at end of file
