tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

numparse_compositions.h (3418B)


      1 // © 2018 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 
      4 #include "unicode/utypes.h"
      5 
      6 #if !UCONFIG_NO_FORMATTING
      7 #ifndef __SOURCE_NUMPARSE_COMPOSITIONS__
      8 #define __SOURCE_NUMPARSE_COMPOSITIONS__
      9 
     10 #include "numparse_types.h"
     11 
     12 U_NAMESPACE_BEGIN
     13 
     14 namespace numparse::impl {
     15 
     16 /**
     17 * Base class for AnyMatcher and SeriesMatcher.
     18 */
     19 // Exported as U_I18N_API for tests
     20 class U_I18N_API CompositionMatcher : public NumberParseMatcher {
     21  protected:
     22    // No construction except by subclasses!
     23    CompositionMatcher() = default;
     24 
     25    // To be overridden by subclasses (used for iteration):
     26    virtual const NumberParseMatcher* const* begin() const = 0;
     27 
     28    // To be overridden by subclasses (used for iteration):
     29    virtual const NumberParseMatcher* const* end() const = 0;
     30 };
     31 
     32 
     33 // NOTE: AnyMatcher is no longer being used. The previous definition is shown below.
     34 // The implementation can be found in SVN source control, deleted around March 30, 2018.
     35 ///**
     36 // * Composes a number of matchers, and succeeds if any of the matchers succeed. Always greedily chooses
     37 // * the first matcher in the list to succeed.
     38 // *
     39 // * NOTE: In C++, this is a base class, unlike ICU4J, which uses a factory-style interface.
     40 // *
     41 // * @author sffc
     42 // * @see SeriesMatcher
     43 // */
     44 //class AnyMatcher : public CompositionMatcher {
     45 //  public:
     46 //    bool match(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const override;
     47 //
     48 //    bool smokeTest(const StringSegment& segment) const override;
     49 //
     50 //    void postProcess(ParsedNumber& result) const override;
     51 //
     52 //  protected:
     53 //    // No construction except by subclasses!
     54 //    AnyMatcher() = default;
     55 //};
     56 
     57 
     58 /**
     59 * Composes a number of matchers, running one after another. Matches the input string only if all of the
     60 * matchers in the series succeed. Performs greedy matches within the context of the series.
     61 *
     62 * @author sffc
     63 * @see AnyMatcher
     64 */
     65 // Exported as U_I18N_API for tests
     66 class U_I18N_API SeriesMatcher : public CompositionMatcher {
     67  public:
     68    bool match(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const override;
     69 
     70    bool smokeTest(const StringSegment& segment) const override;
     71 
     72    void postProcess(ParsedNumber& result) const override;
     73 
     74    virtual int32_t length() const = 0;
     75 
     76  protected:
     77    // No construction except by subclasses!
     78    SeriesMatcher() = default;
     79 };
     80 
     81 /**
     82 * An implementation of SeriesMatcher that references an array of matchers.
     83 *
     84 * The object adopts the array, but NOT the matchers contained inside the array.
     85 */
     86 // Exported as U_I18N_API_CLASS for tests
     87 class U_I18N_API_CLASS ArraySeriesMatcher : public SeriesMatcher {
     88  public:
     89    U_I18N_API ArraySeriesMatcher();  // WARNING: Leaves the object in an unusable state
     90 
     91    typedef MaybeStackArray<const NumberParseMatcher*, 3> MatcherArray;
     92 
     93    /** The array is std::move'd */
     94    U_I18N_API ArraySeriesMatcher(MatcherArray& matchers, int32_t matchersLen);
     95 
     96    UnicodeString toString() const override;
     97 
     98    U_I18N_API int32_t length() const override;
     99 
    100  protected:
    101    const NumberParseMatcher* const* begin() const override;
    102 
    103    const NumberParseMatcher* const* end() const override;
    104 
    105  private:
    106    MatcherArray fMatchers;
    107    int32_t fMatchersLen;
    108 };
    109 
    110 } // namespace numparse::impl
    111 
    112 U_NAMESPACE_END
    113 
    114 #endif //__SOURCE_NUMPARSE_COMPOSITIONS__
    115 #endif /* #if !UCONFIG_NO_FORMATTING */