Home | History | Annotate | Download | only in i18n
      1 /*
      2 **********************************************************************
      3 *   Copyright (C) 2013, International Business Machines
      4 *   Corporation and others.  All Rights Reserved.
      5 **********************************************************************
      6 *
      7 * scriptset.h
      8 *
      9 * created on: 2013 Jan 7
     10 * created by: Andy Heninger
     11 */
     12 
     13 #ifndef __SCRIPTSET_H__
     14 #define __SCRIPTSET_H__
     15 
     16 #include "unicode/utypes.h"
     17 #include "unicode/uobject.h"
     18 #include "unicode/uscript.h"
     19 
     20 #include "uelement.h"
     21 
     22 U_NAMESPACE_BEGIN
     23 
     24 //-------------------------------------------------------------------------------
     25 //
     26 //  ScriptSet - A bit set representing a set of scripts.
     27 //
     28 //              This class was originally used exclusively with script sets appearing
     29 //              as part of the spoof check whole script confusable binary data. Its
     30 //              use has since become more general, but the continued use to wrap
     31 //              prebuilt binary data does constrain the design.
     32 //
     33 //-------------------------------------------------------------------------------
     34 class U_I18N_API ScriptSet: public UMemory {
     35   public:
     36     ScriptSet();
     37     ScriptSet(const ScriptSet &other);
     38     ~ScriptSet();
     39 
     40     UBool operator == (const ScriptSet &other) const;
     41     ScriptSet & operator = (const ScriptSet &other);
     42 
     43     UBool      test(UScriptCode script, UErrorCode &status) const;
     44     ScriptSet &Union(const ScriptSet &other);
     45     ScriptSet &set(UScriptCode script, UErrorCode &status);
     46     ScriptSet &reset(UScriptCode script, UErrorCode &status);
     47     ScriptSet &intersect(const ScriptSet &other);
     48     ScriptSet &intersect(UScriptCode script, UErrorCode &status);
     49     UBool      intersects(const ScriptSet &other) const;  // Sets contain at least one script in commmon.
     50     UBool      contains(const ScriptSet &other) const;    // All set bits in other are also set in this.
     51 
     52     ScriptSet &setAll();
     53     ScriptSet &resetAll();
     54     int32_t countMembers() const;
     55     int32_t hashCode() const;
     56     int32_t nextSetBit(int32_t script) const;
     57 
     58     UnicodeString &displayScripts(UnicodeString &dest) const; // append script names to dest string.
     59     ScriptSet & parseScripts(const UnicodeString &scriptsString, UErrorCode &status);  // Replaces ScriptSet contents.
     60 
     61   private:
     62     uint32_t  bits[6];
     63 };
     64 
     65 U_NAMESPACE_END
     66 
     67 U_CAPI UBool U_EXPORT2
     68 uhash_compareScriptSet(const UElement key1, const UElement key2);
     69 
     70 U_CAPI int32_t U_EXPORT2
     71 uhash_hashScriptSet(const UElement key);
     72 
     73 U_CAPI void U_EXPORT2
     74 uhash_deleteScriptSet(void *obj);
     75 
     76 #endif // __SCRIPTSET_H__
     77