87 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| // © 2016 and later: Unicode, Inc. and others.
 | |
| // License & terms of use: http://www.unicode.org/copyright.html
 | |
| /*
 | |
| **********************************************************************
 | |
| *   Copyright (C) 2013, International Business Machines
 | |
| *   Corporation and others.  All Rights Reserved.
 | |
| **********************************************************************
 | |
| *
 | |
| * scriptset.h
 | |
| *
 | |
| * created on: 2013 Jan 7
 | |
| * created by: Andy Heninger
 | |
| */
 | |
| 
 | |
| #ifndef __SCRIPTSET_H__
 | |
| #define __SCRIPTSET_H__
 | |
| 
 | |
| #include "unicode/utypes.h"
 | |
| #include "unicode/uobject.h"
 | |
| #include "unicode/uscript.h"
 | |
| 
 | |
| #include "uelement.h"
 | |
| 
 | |
| U_NAMESPACE_BEGIN
 | |
| 
 | |
| //-------------------------------------------------------------------------------
 | |
| //
 | |
| //  ScriptSet - A bit set representing a set of scripts.
 | |
| //
 | |
| //              This class was originally used exclusively with script sets appearing
 | |
| //              as part of the spoof check whole script confusable binary data. Its
 | |
| //              use has since become more general, but the continued use to wrap
 | |
| //              prebuilt binary data does constrain the design.
 | |
| //
 | |
| //-------------------------------------------------------------------------------
 | |
| class U_I18N_API ScriptSet: public UMemory {
 | |
|   public:
 | |
|     static constexpr int32_t SCRIPT_LIMIT = 224;  // multiple of 32!
 | |
| 
 | |
|     ScriptSet();
 | |
|     ScriptSet(const ScriptSet &other);
 | |
|     ~ScriptSet();
 | |
| 
 | |
|     bool operator == (const ScriptSet &other) const;
 | |
|     bool operator != (const ScriptSet &other) const {return !(*this == other);}
 | |
|     ScriptSet & operator = (const ScriptSet &other);
 | |
| 
 | |
|     UBool      test(UScriptCode script, UErrorCode &status) const;
 | |
|     ScriptSet &Union(const ScriptSet &other);
 | |
|     ScriptSet &set(UScriptCode script, UErrorCode &status);
 | |
|     ScriptSet &reset(UScriptCode script, UErrorCode &status);
 | |
|     ScriptSet &intersect(const ScriptSet &other);
 | |
|     ScriptSet &intersect(UScriptCode script, UErrorCode &status);
 | |
|     UBool      intersects(const ScriptSet &other) const;  // Sets contain at least one script in common.
 | |
|     UBool      contains(const ScriptSet &other) const;    // All set bits in other are also set in this.
 | |
| 
 | |
|     ScriptSet &setAll();
 | |
|     ScriptSet &resetAll();
 | |
|     int32_t countMembers() const;
 | |
|     int32_t hashCode() const;
 | |
|     int32_t nextSetBit(int32_t script) const;
 | |
| 
 | |
|     UBool isEmpty() const;
 | |
| 
 | |
|     UnicodeString &displayScripts(UnicodeString &dest) const; // append script names to dest string.
 | |
|     ScriptSet & parseScripts(const UnicodeString &scriptsString, UErrorCode &status);  // Replaces ScriptSet contents.
 | |
| 
 | |
|     // Wraps around UScript::getScriptExtensions() and adds the corresponding scripts to this instance.
 | |
|     void setScriptExtensions(UChar32 codePoint, UErrorCode& status);
 | |
| 
 | |
|   private:
 | |
|     uint32_t  bits[SCRIPT_LIMIT / 32];
 | |
| };
 | |
| 
 | |
| U_NAMESPACE_END
 | |
| 
 | |
| U_CAPI UBool U_EXPORT2
 | |
| uhash_compareScriptSet(const UElement key1, const UElement key2);
 | |
| 
 | |
| U_CAPI int32_t U_EXPORT2
 | |
| uhash_hashScriptSet(const UElement key);
 | |
| 
 | |
| U_CAPI void U_EXPORT2
 | |
| uhash_deleteScriptSet(void *obj);
 | |
| 
 | |
| #endif // __SCRIPTSET_H__
 |