/*
* WideCharArray.h
* Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL++2000
#pragma once
#include <sol\Array.h>
#include <sol\InvalidArgumentException.h>
#include <sol\OutOfMemoryException.h>
#include <sol\OutOfRangeException.h>
namespace SOL {
class WideCharArray :public Array {
private:
wchar_t* array;
public:
WideCharArray(UINT size)
:Array(size), array(NULL)
{
if (size >0) {
array = new wchar_t[size];
if(array == NULL) {
throw OutOfMemoryException("Failed to create a wideCharArray");
}
} else {
throw InvalidArgumentException("WideCharArray::WideCharArray,1,InvalidArgument");
}
}
public:
~WideCharArray()
{
clear();
}
public:
void clear()
{
if(array) {
delete [] array;
}
setSize(0);
array = NULL;
}
public:
void copy(UINT pos, const wchar_t* string, UINT len)
{
if ((pos + len) <= getSize()) {
wchar_t* ptr = (array + pos);
for(UINT i = 0; i<len; i++) {
*ptr++ = *string++;
}
}
}
public:
void shallowCopy(wchar_t* data, uint size) {
clear();
array = data;
setSize(size);
}
public:
BOOL expand(UINT len)
{
UINT size = getSize();
BOOL rc = FALSE;
wchar_t* temp = new wchar_t[size+len];
if(temp) {
for(UINT i = 0; i<size; i++) {
*(temp + i) = *(array + i);
}
size += len;
setSize(size);
delete [] array;
array = temp;
rc = TRUE;
}
return rc;
}
public:
wchar_t getNth(UINT pos)
{
wchar_t wc = NULL;
if(pos>=0 && pos < getSize()) {
wc = array[pos];
}
else {
throw OutOfRangeException("WideCharArray::getNth,Index is out of range");
}
return wc;
}
public:
const wchar_t* getContents() {
return array;
}
public:
void setNth(UINT pos, wchar_t wc) {
if(pos>=0 && pos < getSize()) {
array[pos] = wc;
} else {
throw OutOfRangeException("WideCharArray::setNth,Index is out of range");
}
}
};
}
|