12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // © 2019 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- // lsr.h
- // created: 2019may08 Markus W. Scherer
- #ifndef __LSR_H__
- #define __LSR_H__
- #include "unicode/utypes.h"
- #include "unicode/uobject.h"
- #include "cstring.h"
- U_NAMESPACE_BEGIN
- struct LSR final : public UMemory {
- static constexpr int32_t REGION_INDEX_LIMIT = 1001 + 26 * 26;
- static constexpr int32_t EXPLICIT_LSR = 7;
- static constexpr int32_t EXPLICIT_LANGUAGE = 4;
- static constexpr int32_t EXPLICIT_SCRIPT = 2;
- static constexpr int32_t EXPLICIT_REGION = 1;
- static constexpr int32_t IMPLICIT_LSR = 0;
- static constexpr int32_t DONT_CARE_FLAGS = 0;
- const char *language;
- const char *script;
- const char *region;
- char *owned = nullptr;
- /** Index for region, 0 if ill-formed. @see indexForRegion */
- int32_t regionIndex = 0;
- int32_t flags = 0;
- /** Only set for LSRs that will be used in a hash table. */
- int32_t hashCode = 0;
- LSR() : language("und"), script(""), region("") {}
- /** Constructor which aliases all subtag pointers. */
- LSR(const char *lang, const char *scr, const char *r, int32_t f) :
- language(lang), script(scr), region(r),
- regionIndex(indexForRegion(region)), flags(f) {}
- /**
- * Constructor which prepends the prefix to the language and script,
- * copies those into owned memory, and aliases the region.
- */
- LSR(char prefix, const char *lang, const char *scr, const char *r, int32_t f,
- UErrorCode &errorCode);
- LSR(LSR &&other) noexcept;
- LSR(const LSR &other) = delete;
- inline ~LSR() {
- // Pure inline code for almost all instances.
- if (owned != nullptr) {
- deleteOwned();
- }
- }
- LSR &operator=(LSR &&other) noexcept;
- LSR &operator=(const LSR &other) = delete;
- /**
- * Returns a positive index (>0) for a well-formed region code.
- * Do not rely on a particular region->index mapping; it may change.
- * Returns 0 for ill-formed strings.
- */
- static int32_t indexForRegion(const char *region);
- UBool isEquivalentTo(const LSR &other) const;
- bool operator==(const LSR &other) const;
- inline bool operator!=(const LSR &other) const {
- return !operator==(other);
- }
- LSR &setHashCode();
- private:
- void deleteOwned();
- };
- U_NAMESPACE_END
- #endif // __LSR_H__
|