/*
*******************************************************************************
* Copyright (C) 2009-2013, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
*
* This file contains declarations for the class DecimalFormatStaticSets
*
* DecimalFormatStaticSets holds the UnicodeSets that are needed for lenient
* parsing of decimal and group separators.
********************************************************************************
*/

#ifndef DECFMTST_H
#define DECFMTST_H

#include "unicode/utypes.h"

 #if !UCONFIG_NO_FORMATTING

U_NAMESPACE_BEGIN

class  UnicodeSet;


class DecimalFormatStaticSets : public UMemory
{
public:
    // Constructor and Destructor not for general use.
    //   Public to permit access from plain C implementation functions.
    DecimalFormatStaticSets(UErrorCode &status);
    ~DecimalFormatStaticSets();

    /**
      * Return a pointer to a lazy-initialized singleton instance of this class.
      */
    static const DecimalFormatStaticSets *getStaticSets(UErrorCode &status);

    static const UnicodeSet *getSimilarDecimals(UChar32 decimal, UBool strictParse);

    UnicodeSet *fDotEquivalents;
    UnicodeSet *fCommaEquivalents;
    UnicodeSet *fOtherGroupingSeparators;
    UnicodeSet *fDashEquivalents;

    UnicodeSet *fStrictDotEquivalents;
    UnicodeSet *fStrictCommaEquivalents;
    UnicodeSet *fStrictOtherGroupingSeparators;
    UnicodeSet *fStrictDashEquivalents;

    UnicodeSet *fDefaultGroupingSeparators;
    UnicodeSet *fStrictDefaultGroupingSeparators;

    UnicodeSet *fMinusSigns;
    UnicodeSet *fPlusSigns;
private:
    void cleanup();

};


U_NAMESPACE_END

#endif   // !UCONFIG_NO_FORMATTING
#endif   // DECFMTST_H
