Newer
Older
Import / applications / RocketMan / Source Code / String.h
/*
 *  String.h
 *  iphone-gl-app
 *
 *  Created by John Ryland on 15/06/09.
 *  Copyright 2009 InvertedLogic. All rights reserved.
 *
 */

#ifndef STRING_H
#define STRING_H


#include "Iterators.h"


class String : public List<char>
{
public:
    String() : List<char>()
    {
    }

    String(const String &cpy)
    {
        items = 0;
        cnt = 0;
        if ( &cpy != this )
            copy(cpy.items);
    }

    String(const char *cpy)
    {
        items = 0;
        copy(cpy);
    }

    const String& operator=(const String& cpy)
    {
        if ( &cpy != this )
            copy(cpy.items);
        return *this;
    }
    
    const String &operator=(const char *cpy)
    {
        copy(cpy);
        return *this;
    }

    void copy(const char *str)
    {
        free(items);
        items = 0;
        cnt = 0;
        if ( str ) {
            items = strdup(str);
            cnt = strlen(str);
        }
    }

    const String &operator+=(const char *str)
    {
        if ( str ) {
            int oldCnt = cnt;
            int addCnt = strlen(str);
            cnt += addCnt;
            items = (char *)realloc(items, sizeof(char) * (cnt + 1));
            memcpy(items + oldCnt, str, addCnt + 1);
        }
        return *this;
    }

    const String &operator+=(const String &str)
    {
        if ( str.items ) {
            int oldCnt = cnt;
            cnt += str.cnt;
            items = (char *)realloc(items, sizeof(char) * (cnt + 1));
            memcpy(items + oldCnt, str.items, str.cnt + 1);
        }
        return *this;
    }

    inline operator const char *() const
    {
        return items;
    }
};
 

inline const String &operator+(const String &stra, const String &strb)
{
    static String ret;
    ret = stra;
    ret += strb;
    return ret;
}


inline const String &operator+(const String &stra, const char *strb)
{
    static String ret;
    ret = stra;
    ret += strb;
    return ret;
}


#endif // STRING_H