1 #ifndef incl_HPHP_ICU_TRANSLITERATOR_H
2 #define incl_HPHP_ICU_TRANSLITERATOR_H
4 #include "hphp/runtime/ext/extension.h"
5 #include "hphp/runtime/ext/icu/icu.h"
7 #include <unicode/translit.h>
9 namespace HPHP
{ namespace Intl
{
10 /////////////////////////////////////////////////////////////////////////////
11 extern const StaticString s_Transliterator
;
13 struct Transliterator
: IntlError
{
15 Transliterator(const Transliterator
&) = delete;
16 Transliterator
& operator=(const Transliterator
& src
) {
18 m_trans
= src
.m_trans
->clone();
22 ~Transliterator() { setTransliterator(nullptr); }
24 bool isValid() const {
28 static Transliterator
* Get(ObjectData
* obj
) {
29 return GetData
<Transliterator
>(obj
, s_Transliterator
);
32 static Object
newInstance(icu::Transliterator
* trans
) {
33 if (!c_Transliterator
) {
34 c_Transliterator
= Unit::lookupClass(s_Transliterator
.get());
35 assertx(c_Transliterator
);
37 Object obj
{c_Transliterator
};
38 auto data
= Native::data
<Transliterator
>(obj
);
39 data
->setTransliterator(trans
);
43 icu::Transliterator
* trans() const { return m_trans
; }
44 void setTransliterator(icu::Transliterator
* trans
) {
52 icu::Transliterator
* m_trans
{nullptr};
54 static Class
* c_Transliterator
;
57 /////////////////////////////////////////////////////////////////////////////
58 }} // namespace HPHP::Intl
60 #endif // incl_HPHP_ICU_TRANSLITERATOR_H