/*
* WideCharString.h
* Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL++2000
#pragma once
#include <sol\WideCharArray.h>
namespace SOL {
class WideCharString :public WideCharArray {
private:
UINT getLength(const wchar_t* string) {
UINT len = 0;
if(string) {
len = wcslen(string);
}
return len;
}
public:
WideCharString(const wchar_t* string)
:WideCharArray(getLength(string))
{
copy(0, string, getSize());
}
public:
WideCharString(const char* mbstring)
:WideCharArray(0)
{
const wchar_t* wcstring = toWideChar(mbstring);
if (wcstring) {
//NULL terminate string.
shallowCopy(wcstring, wcslen(wcstring));
}
//copy(0, string, getSize());
}
public:
void append(const wchar_t* string)
{
if (string) {
int size = getSize();
int len = getLength(string);
expand(len);
copy(size, string, len);
}
}
public:
operator wchar_t*()
{
return WideCharArray::getContents();
}
public:
operator const wchar_t*()
{
return WideCharArray::getContents();
}
public:
/**
* Return a new wchar_t's copy string. Need to delete [] it after use.
*/
wchar_t* getString()
{
UINT size = getSize();
wchar_t* temp = new wchar_t[size+1];
if(temp) {
const wchar_t* ptr = getContents();
for(UINT i = 0; i<size; i++) {
*(temp+i) = *(ptr+i);
}
*(temp+size) = NULL;
}
return temp;
}
private:
wchar_t* toWideChar(const char* mbstring) {
wchar_t* wcstring = NULL;
if (mbstring == NULL) {
return wcstring;
}
int cb = MultiByteToWideChar(CP_ACP, 0, mbstring, -1, NULL, 0);
if (cb >0) {
wcstring = new wchar_t[cb];
wcstring[0] = Zero;
MultiByteToWideChar(CP_ACP, 0, mbstring, -1, wcstring, cb);
}
return wcstring;
}
};
}
|