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