You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2022/11/09 17:35:36 UTC
[lucenenet] 01/06: PERFORMANCE: Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter: Prefer ReadOnlySpan overloads of DateTime.TryParse() and DateTime.TryParseExact(), when available.
This is an automated email from the ASF dual-hosted git repository.
nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 694b5184617cd1dcbdd111375d21083be252a521
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Wed Nov 9 21:11:04 2022 +0700
PERFORMANCE: Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter: Prefer ReadOnlySpan<char> overloads of DateTime.TryParse() and DateTime.TryParseExact(), when available.
---
.../Analysis/Sinks/DateRecognizerSinkFilter.cs | 25 ++++++++++++++++------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/src/Lucene.Net.Analysis.Common/Analysis/Sinks/DateRecognizerSinkFilter.cs b/src/Lucene.Net.Analysis.Common/Analysis/Sinks/DateRecognizerSinkFilter.cs
index ccf2900b1..edc59c276 100644
--- a/src/Lucene.Net.Analysis.Common/Analysis/Sinks/DateRecognizerSinkFilter.cs
+++ b/src/Lucene.Net.Analysis.Common/Analysis/Sinks/DateRecognizerSinkFilter.cs
@@ -24,7 +24,7 @@ namespace Lucene.Net.Analysis.Sinks
*/
/// <summary>
- /// Attempts to parse the <see cref="CharTermAttribute.ToString()"/> as a Date using either the
+ /// Attempts to parse the <see cref="ICharTermAttribute.Buffer"/> as a Date using either the
/// <see cref="DateTime.TryParse(string, IFormatProvider, DateTimeStyles, out DateTime)"/> or
/// <see cref="DateTime.TryParseExact(string, string[], IFormatProvider, DateTimeStyles, out DateTime)"/> methods.
/// If a format is passed, <see cref="DateTime.TryParseExact(string, string[], IFormatProvider, DateTimeStyles, out DateTime)"/>
@@ -59,7 +59,7 @@ namespace Lucene.Net.Analysis.Sinks
/// Creates a new instance of <see cref="DateRecognizerSinkFilter"/> using the current culture and <see cref="DateTimeStyles.None"/>.
/// Strictly matches the supplied DateTime formats using <see cref="DateTime.TryParseExact(string, string, IFormatProvider, DateTimeStyles, out DateTime)"/>.
/// </summary>
- /// <param name="format">The allowable format of the <see cref="CharTermAttribute.ToString()"/>.
+ /// <param name="format">The allowable format of the <see cref="ICharTermAttribute.Buffer"/>.
/// If supplied, it must match the format of the date exactly to get a match.</param>
public DateRecognizerSinkFilter(string format)
: this(new string[] { format }, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None)
@@ -69,7 +69,7 @@ namespace Lucene.Net.Analysis.Sinks
/// Creates a new instance of <see cref="DateRecognizerSinkFilter"/> using the current culture and <see cref="DateTimeStyles.None"/>.
/// Strictly matches the supplied DateTime formats using <see cref="DateTime.TryParseExact(string, string[], IFormatProvider, DateTimeStyles, out DateTime)"/>.
/// </summary>
- /// <param name="formats">An array of allowable formats of the <see cref="CharTermAttribute.ToString()"/>.
+ /// <param name="formats">An array of allowable formats of the <see cref="ICharTermAttribute.Buffer"/>.
/// If supplied, one of them must match the format of the date exactly to get a match.</param>
public DateRecognizerSinkFilter(string[] formats)
: this(formats, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None)
@@ -90,7 +90,7 @@ namespace Lucene.Net.Analysis.Sinks
/// Creates a new instance of <see cref="DateRecognizerSinkFilter"/> using the supplied format, culture and <see cref="DateTimeStyles.None"/>.
/// Strictly matches the supplied DateTime formats using <see cref="DateTime.TryParseExact(string, string, IFormatProvider, DateTimeStyles, out DateTime)"/>.
/// </summary>
- /// <param name="format">The allowable format of the <see cref="CharTermAttribute.ToString()"/>.
+ /// <param name="format">The allowable format of the <see cref="ICharTermAttribute.Buffer"/>.
/// If supplied, it must match the format of the date exactly to get a match.</param>
/// <param name="culture">An object that supplies culture-specific format information</param>
public DateRecognizerSinkFilter(string format, IFormatProvider culture)
@@ -101,7 +101,7 @@ namespace Lucene.Net.Analysis.Sinks
/// Creates a new instance of <see cref="DateRecognizerSinkFilter"/> using the supplied formats, culture and <see cref="DateTimeStyles.None"/>.
/// Strictly matches the supplied DateTime formats using <see cref="DateTime.TryParseExact(string, string[], IFormatProvider, DateTimeStyles, out DateTime)"/>.
/// </summary>
- /// <param name="formats">An array of allowable formats of the <see cref="CharTermAttribute.ToString()"/>.
+ /// <param name="formats">An array of allowable formats of the <see cref="ICharTermAttribute.Buffer"/>.
/// If supplied, one of them must match the format of the date exactly to get a match.</param>
/// <param name="culture">An object that supplies culture-specific format information</param>
public DateRecognizerSinkFilter(string[] formats, IFormatProvider culture)
@@ -112,7 +112,7 @@ namespace Lucene.Net.Analysis.Sinks
/// Creates a new instance of <see cref="DateRecognizerSinkFilter"/> using the supplied format, culture and <see cref="DateTimeStyles"/>.
/// Strictly matches the supplied DateTime formats using <see cref="DateTime.TryParseExact(string, string, IFormatProvider, DateTimeStyles, out DateTime)"/>.
/// </summary>
- /// <param name="format">The allowable format of the <see cref="CharTermAttribute.ToString()"/>.
+ /// <param name="format">The allowable format of the <see cref="ICharTermAttribute.Buffer"/>.
/// If supplied, it must match the format of the date exactly to get a match.</param>
/// <param name="culture">An object that supplies culture-specific format information</param>
/// <param name="style">A bitwise combination of enumeration values that indicates the permitted format of s.
@@ -125,7 +125,7 @@ namespace Lucene.Net.Analysis.Sinks
/// Creates a new instance of <see cref="DateRecognizerSinkFilter"/> using the supplied formats, culture and <see cref="DateTimeStyles"/>.
/// Strictly matches the supplied DateTime formats using <see cref="DateTime.TryParseExact(string, string[], IFormatProvider, DateTimeStyles, out DateTime)"/>.
/// </summary>
- /// <param name="formats">An array of allowable formats of the <see cref="CharTermAttribute.ToString()"/>.
+ /// <param name="formats">An array of allowable formats of the <see cref="ICharTermAttribute.Buffer"/>.
/// If supplied, one of them must match the format of the date exactly to get a match.</param>
/// <param name="culture">An object that supplies culture-specific format information</param>
/// <param name="style">A bitwise combination of enumeration values that indicates the permitted format of s.
@@ -145,6 +145,16 @@ namespace Lucene.Net.Analysis.Sinks
}
//We don't care about the date, just that we can parse it as a date
+#if FEATURE_NUMBER_PARSE_READONLYSPAN
+ if (m_formats is null)
+ {
+ return DateTime.TryParse(new ReadOnlySpan<char>(m_termAtt.Buffer, 0, m_termAtt.Length), m_culture, m_style, out _);
+ }
+ else
+ {
+ return DateTime.TryParseExact(new ReadOnlySpan<char>(m_termAtt.Buffer, 0, m_termAtt.Length), m_formats, m_culture, m_style, out _);
+ }
+#else
if (m_formats is null)
{
return DateTime.TryParse(m_termAtt.ToString(), m_culture, m_style, out _);
@@ -153,6 +163,7 @@ namespace Lucene.Net.Analysis.Sinks
{
return DateTime.TryParseExact(m_termAtt.ToString(), m_formats, m_culture, m_style, out _);
}
+#endif
}
}
}
\ No newline at end of file