SOL9 2.0 Class: WideCharString

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

Source code

/*
 * 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;
    }

};

}



Last modified: 19 Dec 2009

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