// automatically generated by tools/gen-uprops.py at $ Sun Sep 18 16:51:34 2011 $
/// Returns the property of the specified character @a c.
inline int GeneralCategory::of(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return DEFAULT_VALUE; const detail::CharacterPropertyPartition* const p = std::upper_bound(VALUES_, VALUES_ + NUMBER_, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyPartition, CodePoint>()); assert(p != VALUES_); return p[-1].property;}
/// Returns the property with the given name.
template<typename CharType>
inline int GeneralCategory::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 79, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 79 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
/// Returns the property of the specified character @a c.
inline int Script::of(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return DEFAULT_VALUE; const detail::CharacterPropertyPartition* const p = std::upper_bound(VALUES_, VALUES_ + NUMBER_, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyPartition, CodePoint>()); assert(p != VALUES_); return p[-1].property;}
/// Returns the property with the given name.
template<typename CharType>
inline int Script::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 157, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 157 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
/// Returns the property of the specified character @a c.
inline int LineBreak::of(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return DEFAULT_VALUE; const detail::CharacterPropertyPartition* const p = std::upper_bound(VALUES_, VALUES_ + NUMBER_, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyPartition, CodePoint>()); assert(p != VALUES_); return p[-1].property;}
/// Returns the property with the given name.
template<typename CharType>
inline int LineBreak::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 68, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 68 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
/// Returns the property of the specified character @a c.
inline int EastAsianWidth::of(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return DEFAULT_VALUE; const detail::CharacterPropertyPartition* const p = std::upper_bound(VALUES_, VALUES_ + NUMBER_, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyPartition, CodePoint>()); assert(p != VALUES_); return p[-1].property;}
/// Returns the property with the given name.
template<typename CharType>
inline int EastAsianWidth::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 12, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 12 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
/// Returns the property of the specified character @a c.
inline int Block::of(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return DEFAULT_VALUE; const detail::CharacterPropertyPartition* const p = std::upper_bound(VALUES_, VALUES_ + NUMBER_, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyPartition, CodePoint>()); assert(p != VALUES_); return p[-1].property;}
/// Returns the property with the given name.
template<typename CharType>
inline int Block::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 179, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 179 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
/// Returns the property with the given name.
template<typename CharType>
inline int CanonicalCombiningClass::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 57, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 57 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
/// Returns the property of the specified character @a c.
inline int CanonicalCombiningClass::of(CodePoint c) /*throw()*/ {
	const CodePoint* const p = std::lower_bound(CHARACTERS_, CHARACTERS_ + NUMBER_, c);
	return (p != CHARACTERS_ + NUMBER_ && *p == c) ? VALUES_[p - CHARACTERS_] : DEFAULT_VALUE;
};
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::WHITE_SPACE>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_WHITE_SPACE_, valuesOf_WHITE_SPACE_ + 11, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_WHITE_SPACE_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::NONCHARACTER_CODE_POINT>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_NONCHARACTER_CODE_POINT_, valuesOf_NONCHARACTER_CODE_POINT_ + 18, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_NONCHARACTER_CODE_POINT_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::DEPRECATED>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_DEPRECATED_, valuesOf_DEPRECATED_ + 6, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_DEPRECATED_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::LOGICAL_ORDER_EXCEPTION>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_LOGICAL_ORDER_EXCEPTION_, valuesOf_LOGICAL_ORDER_EXCEPTION_ + 2, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_LOGICAL_ORDER_EXCEPTION_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::VARIATION_SELECTOR>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_VARIATION_SELECTOR_, valuesOf_VARIATION_SELECTOR_ + 3, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_VARIATION_SELECTOR_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::SOFT_DOTTED>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_SOFT_DOTTED_, valuesOf_SOFT_DOTTED_ + 31, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_SOFT_DOTTED_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::PATTERN_SYNTAX>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_PATTERN_SYNTAX_, valuesOf_PATTERN_SYNTAX_ + 28, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_PATTERN_SYNTAX_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::PATTERN_WHITE_SPACE>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_PATTERN_WHITE_SPACE_, valuesOf_PATTERN_WHITE_SPACE_ + 5, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_PATTERN_WHITE_SPACE_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::JOIN_CONTROL>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_JOIN_CONTROL_, valuesOf_JOIN_CONTROL_ + 1, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_JOIN_CONTROL_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::BIDI_CONTROL>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_BIDI_CONTROL_, valuesOf_BIDI_CONTROL_ + 2, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_BIDI_CONTROL_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::HEX_DIGIT>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_HEX_DIGIT_, valuesOf_HEX_DIGIT_ + 6, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_HEX_DIGIT_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::ASCII_HEX_DIGIT>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_ASCII_HEX_DIGIT_, valuesOf_ASCII_HEX_DIGIT_ + 3, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_ASCII_HEX_DIGIT_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::IDEOGRAPHIC>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_IDEOGRAPHIC_, valuesOf_IDEOGRAPHIC_ + 10, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_IDEOGRAPHIC_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::UNIFIED_IDEOGRAPH>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_UNIFIED_IDEOGRAPH_, valuesOf_UNIFIED_IDEOGRAPH_ + 10, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_UNIFIED_IDEOGRAPH_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::RADICAL>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_RADICAL_, valuesOf_RADICAL_ + 3, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_RADICAL_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::IDS_BINARY_OPERATOR>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_IDS_BINARY_OPERATOR_, valuesOf_IDS_BINARY_OPERATOR_ + 2, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_IDS_BINARY_OPERATOR_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::IDS_TRINARY_OPERATOR>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_IDS_TRINARY_OPERATOR_, valuesOf_IDS_TRINARY_OPERATOR_ + 1, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_IDS_TRINARY_OPERATOR_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::QUOTATION_MARK>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_QUOTATION_MARK_, valuesOf_QUOTATION_MARK_ + 12, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_QUOTATION_MARK_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::DASH>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_DASH_, valuesOf_DASH_ + 18, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_DASH_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::HYPHEN>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_HYPHEN_, valuesOf_HYPHEN_ + 10, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_HYPHEN_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::STERM>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_STERM_, valuesOf_STERM_ + 37, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_STERM_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::TERMINAL_PUNCTUATION>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_TERMINAL_PUNCTUATION_, valuesOf_TERMINAL_PUNCTUATION_ + 55, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_TERMINAL_PUNCTUATION_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::DIACRITIC>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_DIACRITIC_, valuesOf_DIACRITIC_ + 102, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_DIACRITIC_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::EXTENDER>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_EXTENDER_, valuesOf_EXTENDER_ + 16, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_EXTENDER_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_ALPHABETIC>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_OTHER_ALPHABETIC_, valuesOf_OTHER_ALPHABETIC_ + 122, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_OTHER_ALPHABETIC_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_DEFAULT_IGNORABLE_CODE_POINT>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_OTHER_DEFAULT_IGNORABLE_CODE_POINT_, valuesOf_OTHER_DEFAULT_IGNORABLE_CODE_POINT_ + 10, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_OTHER_DEFAULT_IGNORABLE_CODE_POINT_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_GRAPHEME_EXTEND>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_OTHER_GRAPHEME_EXTEND_, valuesOf_OTHER_GRAPHEME_EXTEND_ + 16, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_OTHER_GRAPHEME_EXTEND_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_ID_START>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_OTHER_ID_START_, valuesOf_OTHER_ID_START_ + 3, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_OTHER_ID_START_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_ID_CONTINUE>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_OTHER_ID_CONTINUE_, valuesOf_OTHER_ID_CONTINUE_ + 3, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_OTHER_ID_CONTINUE_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_LOWERCASE>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_OTHER_LOWERCASE_, valuesOf_OTHER_LOWERCASE_ + 13, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_OTHER_LOWERCASE_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_MATH>(CodePoint c) /*throw()*/ {if(!isValidCodePoint(c)) return false; const detail::CharacterPropertyRange<CodePoint>* const p = std::upper_bound(valuesOf_OTHER_MATH_, valuesOf_OTHER_MATH_ + 99, c, detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<CodePoint>, CodePoint>()); return p != valuesOf_OTHER_MATH_ && c <= p[-1].end;}
/// Returns true if the specified character @a c has the property.
template<> inline bool BinaryProperty::is<BinaryProperty::OTHER_UPPERCASE>(CodePoint c) /*throw()*/ {if(c > 0xffffu) return false; const detail::CharacterPropertyRange<Char>* const p = std::upper_bound(valuesOf_OTHER_UPPERCASE_, valuesOf_OTHER_UPPERCASE_ + 2, static_cast<Char>(c), detail::CharacterPropertyRangeComparer<detail::CharacterPropertyRange<Char>, Char>()); return p != valuesOf_OTHER_UPPERCASE_ && c <= p[-1].end;}
/// Returns the property with the given name.
template<typename CharType>
inline int BinaryProperty::forName(const CharType* name) {
	const detail::CharacterPropertyValueName* const p =
		std::lower_bound(NAMES_, NAMES_ + 96, name, detail::CharacterPropertyValueNameComparer());
	return (p != NAMES_ + 96 && PropertyNameComparer::compare(name, p->name)) ?
		p->value : NOT_PROPERTY;
}
