SOL9 2.0 Class: WideCharArray

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * 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");

        }
    }
};

}

Last modified: 19 Dec 2009

Copyright (c) 2009 Antillia.com ALL RIGHTS RESERVED.