-
Mchar(...)
생성자 입니다. 생성자 템플릿 두 가지를 포함하여, 총 다섯 개의 오버로딩 버전이 제공됩니다.
Mchar 객체는 이동 연산이 복사 연산에 비해 효율적이지 않으므로, 별도의 이동 연산은
제공되지 않습니다.
-
Mchar& operator =(...) &
대입 연산자 입니다. 템플릿 버전 두 개를 포함해 총 네 가지의 오버로딩 버전이 제공됩니다.
- Mchar& operator =(const Mchar& rhs) & noexcept;
-
-
-
- template <typename EncodingT_>
- Mchar& operator =(const Mchar<EncodingT_>& rhs) &;
-
-
-
-
-
- Mchar& operator =(uint32_t unicode) &;
-
-
-
- template <typename CharType_>
- std::enable_if_t<IsCharacter<CharType_>::value, Mchar&>
- operator =(const CharType_* c) &;
-
-
-
-
-
-
-
- #include
- using namespace blc::ustr;
- using namespace blc::ustr::encoding;
-
- int main()
- {
- Mchar<UTF8> utf8;
- Mchar<UTF16LE> utf16le;
-
-
- utf8 = U'냥';
-
-
-
-
-
- utf16le = utf8;
-
-
-
-
-
- utf8 = u8"냥";
-
-
-
-
-
-
- utf8 = u"냥";
-
-
-
-
-
-
- utf8 = U"냥";
-
- return 0;
- }
Mchar 객체는 이동 연산이 복사 연산에 비해 효율적이지 않으므로, 별도의 이동 연산은
제공되지 않습니다.
-
uint32_t GetUnicode() const
Mchar 객체가 담고 있는 멀티바이트 문자의 유니코드 값을 구하여 반환합니다.
Mchar 객체가 담고 있는 문자가 무효한 문자인 경우, 모든 비트가 1인 uint32_t 타입의
값(blc::ustr::encoding
::kInvalidCharacter)을 반환합니다.
사용중인 인코딩 단위전략이 유니코드 계열인 경우에는
GetCode 함수와 동일한 작업을 수행합니다.
-
SizeType SetUnicode(uint32_t unicode)
Mchar 객체에, 유니코드값이 나타내는 문자를 멀티바이트로 인코딩(사용중인
인코딩 단위전략에 따라)하여 대입받습니다. 멀티바이트로 인코딩된 바이트 길이를 반환합니다.
예를 들어 UTF-8 인코딩 단위전략을 사용중일 때, 영어 알파벳은 1 바이트로 인코딩 되므로 1을 반환,
한글 음절 문자의 경우 3바이트로 인코딩 되므로 3을 반환합니다.
사용중인 인코딩 단위전략이 유니코드 계열인 경우에는
SetCode 함수와 동일한 작업을 수행합니다.
-
uint32_t GetCode() const
Mchar 객체가 담고 있는 멀티바이트 문자의, 현재 사용중인 인코딩 단위전략의 코드페이지에서의
코드 값을 구하여 반환합니다. Mchar 객체가 담고 있는 문자가 무효한 경우, 모든 비트가 1인
uint32_t 타입의 값(blc::ustr::encoding
::kInvalidCharacter)을
반환합니다.
사용중인 인코딩 단위전략이 유니코드 계열인 경우에는
GetUnicode 함수와 동일한 작업을 수행합니다.
-
SizeType SetCode(uint32_t code)
현재 사용중인 인코딩 단위전략의 코드페이지에서 코드값이 나타내는 문자를 대입받습니다.
멀티바이트로 인코딩된 바이트 길이를 반환합니다. 예를 들어 UTF-8 인코딩 단위전략을
사용중일 때, 영어 알파벳은 1 바이트로 간주되므로 1을 반환, 한글 음절 문자의 경우
3바이트로 인코딩 되므로 3을 반환합니다.
사용중인 인코딩 단위전략이 유니코드 계열인 경우에는
SetUnicode 함수와 동일한 작업을 수행합니다.
-
SizeType SetBom()
Mchar 객체에 BOM(Byte Order Mark)문자를 대입합니다.
만일 CP949와 같이 BOM이 없는 인코딩의 경우에는 무효한 문자가 대입됩니다.
-
template <typename CharType_>
SizeType SetChar(const CharType_* c)
문자 타입 포인터를 받아, 해당 포인터가 가리키는 멀티바이트 문자를 대입받는 함수입니다.
char, char16_t, char32_t 타입의 포인터를 가리지 않고 받습니다.
단 char16_t는 무조건 UTF-16 리틀엔디안으로, char32_t는 무조건
UTF-32 리틀엔디안으로 간주합니다(대입 전에 사용중인 인코딩 단위전략에 맞게 인코딩을
변환한 후 대입 합니다). char 타입의 경우 현재 사용중인 인코딩 단위전략이 표현하는
인코딩으로 해석합니다. 다음은 예제 코드입니다.
- #include
- using namespace blc::ustr;
- using namespace blc::ustr::encoding;
-
- int main()
- {
- Mchar<UTF8> utf8;
-
-
-
-
-
- utf8.SetChar(u8"냥");
-
-
-
-
-
-
- utf8.SetChar(u"냥");
-
-
-
-
-
-
- utf8.SetChar(U"냥");
-
- return 0;
- }
-
bool IsBom() const
Mchar 객체에 담긴 문자가 BOM(Byte Order Mark) 문자이면 true를, 그렇지 않으면
false를 반환합니다.
-
bool IsValid() const noexcept
Mchar 객체에 담긴 문자가 정상적인 문자인 경우 true를, 무효한 문자인 경우 false를
반환합니다.
-
template <int kN = 1>
SizeType size() const
Mchar 객체에 담긴 멀티바이트 문자가 차지하는 크기를 반환합니다. 템플릿 비타입 인수 kN을
통해 문자 타입의 크기를 설정할 수 있습니다. 예를 들어 BMP 바깥 문자 U+01D11E('𝄞')
를 담고 있는 Mchar 객체(UTF-8 인코딩 단위전략 사용)에 대해 size<1>()을
호출한 결과는 4(표현에 1 바이트 크기인 char 변수 4개가 필요)가 됩니다. 마찬가지의 경우에
size<2>()을 호출한 결과는 2(표현에 2바이트 크기인 char16_t 변수 2개가
필요)가 되며, size<4>()의 결과는 항상 1이 됩니다(모든 문자는 char32_t
타입 변수 하나로 표현 가능하므로). 다른 예로 한글 음절 문자의 경우로 생각해 보면,
size<1>()의 호출 결과는 3, size<2>()의 호출 결과와
size<4>()의 호출 결과는 1이 됩니다.
-
SizeType length() const
-
template <typename EncodingT_>
int Compare(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값보다 크면 1,
작으면 -1, 같으면 0을 반환합니다.
-
template <typename EncodingT_>
int operator <(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값보다 작으면 true,
크거나 같으면 false를 반환합니다.
-
template <typename EncodingT_>
int operator >(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값보다 크면 true,
작거나 같으면 false를 반환합니다.
-
template <typename EncodingT_>
int operator <=(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값보다
작거나 같으면 true, 크면 false를 반환합니다.
-
template <typename EncodingT_>
int operator >=(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값보다
크거나 같으면 true, 작으면 false를 반환합니다.
-
template <typename EncodingT_>
int operator ==(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값과
같으면 true, 다르면 false를 반환합니다.
-
template <typename EncodingT_>
int operator !=(const Mchar<EncodingT_>& rhs) const
this와 rhs가 담고있는 문자의 유니코드를 각각 구해 비교합니다.
this가 담고 있는 문자의 유니코드값이 rhs가 담고 있는 문자의 유니코드 값과
다르면 true, 같으면 false를 반환합니다.
-
template <StrType_>
StrType_&& StringAppend(StrType_&& str) const
표준 문자열 객체(std::string, std::u16string,
std::u32string, std::wstring 등)의 뒤에, Mchar 객체가 담고 있는 문자를 추가합니다.
std::string 객체에는 사용중인 인코딩 단위전략에 해당하는 인코딩으로 문자를 추가하고,
std::u16string 객체는 UTF-16 리틀엔디안, std::u32string 객체는 UTF-32 리틀엔디안 인코딩으로
문자를 추가합니다. this가 담고 있는 문자가 무효한 문자인 경우, 대신
kReplacementCharacter 문자를
추가합니다.
-
template <typename StrType_, typename = std::enable_if_t<...>>
explicit inline operator StrType_() const
Mchar 객체가 담고 있는 멀티바이트 문자 하나를 갖는, 표준 문자열 객체 타입을 반환합니다. std::string으로 변환 시 현재 사용중인 인코딩 단위전략에 해당하는 인코딩을 사용하며,
std::u16string 객체는 UTF-16 리틀엔디안, std::u32string 객체는 UTF-32 리틀엔디안 인코딩을 사용합니다. this가 담고 있는 문자가 무효한 문자인 경우,
대신
kReplacementCharacter 문자 하나를 담은 표준 문자열 객체를 반환합니다.
-
explicit operator const CharType* () const noexcept
Mchar 객체가 담고 있는 멀티바이트 문자를 그대로 반환합니다. 반환 타입 const
CharType*은 const char*와 같습니다.
이 멀티바이트 문자는 사용중인 인코딩 단위전략으로 인코딩 되어 있습니다. this가 담고 있는 문자가 무효한 문자인 경우, 빈 문자열(문자 배열)을 반환합니다.
-
explicit operator char32_t() const
Mchar 객체가 담고 있는 멀티바이트 문자의 유니코드 값을 반환합니다. this가 담고 있는 문자가 무효한 문자인 경우 모든 비트가 1인 uint32_t 타입의 상수
blc::ustr::encoding::kInvalidCharacter 를 반환합니다.
-
static Mchar GetReplacementChar()
현재 사용중인 인코딩 단위전략의 인코딩으로 해석할 수 없는 문자를 만났을 때
대체할 문자를 담은 Mchar 객체를 구합니다.