/*
* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
* YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
* All rights reserved.
*
* Redistribution and use of this software in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions and disclaimer are agreed and accepted by the user:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the names of the copyrighters, the name of the project which
* is related to this software (hereinafter referred to as "project") nor
* the names of the contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 4. No merchantable use may be permitted without prior written
* notification to the copyrighters. However, using this software for the
* purpose of testing or evaluating any products including merchantable
* products may be permitted without any notification to the copyrighters.
*
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
* BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* $TAHI: v6eval/lib/Cm/CmString.h,v 1.8 2001/10/12 04:56:14 tanaka Exp $
*/
#ifndef _Cm_CmString_h_
#define _Cm_CmString_h_ 1
/* Interface Definition */
#include "CmTypes.h"
#include "CmCltn.h"
//class ostream;
class CmString {
protected:
CSTR data_;
long length_;
public:
CmString();
CmString(CSTR);
CmString(CSTR,long);
CmString(const CmString&);
virtual ~CmString();
inline CSTR string() const;
inline long length() const;
CmString& operator=(const CmString&);
CmString& operator=(CSTR);
virtual uint32_t hash() const;
bool isEqual(const CmString*) const;
int compare(const CmString&) const;
virtual int compare(CSTR) const;
virtual bool operator==(const CmString&) const;
bool operator==(CSTR) const;
inline bool operator!=(const CmString&) const;
inline bool operator!=(CSTR) const;
inline bool operator>(const CmString&) const;
inline bool operator>=(const CmString&) const;
inline bool operator<(const CmString&) const;
inline bool operator<=(const CmString&) const;
inline bool operator>(CSTR) const;
inline bool operator>=(CSTR) const;
inline bool operator<(CSTR) const;
inline bool operator<=(CSTR) const;
virtual bool like(CSTR) const;
virtual bool case_insensitive_equal(const CmString&) const;
virtual bool case_insensitive_equal(CSTR) const;
char operator[](long index) const;
virtual CmString substr(long start, long length) const;
CmString left(long length) const;
CmString right(long start) const;
virtual void set_to_substr(long start, long length);
void set_to_left(long length);
void set_to_right(long start);
virtual long search(long start, char) const;
long index(char) const;
long rindex(char) const;
virtual bool convert(int&) const;
virtual bool convert(long&) const;
virtual bool convert(float&) const;
virtual bool convert(double&) const;
//friend ostream& operator<<(ostream&, const CmString&);
protected:
virtual void set(CSTR,long);
virtual void free();
};
interfaceCmSet(StringSet, CmString);
interfaceCmList(StringList, CmString);
class CmCString : public CmString {
long allocated_;
public:
CmCString();
CmCString(CSTR);
CmCString(CSTR,long);
CmCString(const CmString&);
CmCString(const CmCString&);
CmCString& operator+=(CSTR s);
CmCString& operator+=(const CmString& s);
virtual ~CmCString();
protected:
virtual void set(CSTR,long);
private:
void free();
};
interfaceCmList(CStringList, CmCString);
inline CSTR CmString::string() const {return data_;}
inline long CmString::length() const {return length_;}
inline char CmString::operator [](long index) const {return data_[index];}
inline CmString CmString::left(long length) const {return substr(0, length);}
inline CmString CmString::right(long start) const {return substr(start, -1);}
inline void CmString::set_to_left(long length) {set_to_substr(0, length);}
inline void CmString::set_to_right(long start) {set_to_substr(start, -1);}
inline long CmString::index(char c) const {return search(0, c);}
inline long CmString::rindex(char c) const {return search(-1, c);}
inline bool CmString::operator!=(const CmString& s) const {
return !operator==(s);}
inline bool CmString::operator!=(CSTR s) const {
return !operator==(s);}
inline bool CmString::operator>(const CmString& s) const {
return compare(s)>0;}
inline bool CmString::operator>(CSTR s) const {
return compare(s)>0;}
inline bool CmString::operator>=(const CmString& s) const {
return compare(s)>=0;}
inline bool CmString::operator>=(CSTR s) const {
return compare(s)>=0;}
inline bool CmString::operator <(const CmString& s) const {
return compare(s)<0;}
inline bool CmString::operator <(CSTR s) const {
return compare(s)<0;}
inline bool CmString::operator<=(const CmString& s) const {
return compare(s)<=0;}
inline bool CmString::operator <=(CSTR s) const {
return compare(s)<=0;}
inline bool CmString::isEqual(const CmString* s) const {
return operator==(*s);}
inline CmCString& CmCString::operator+=(const CmString& s) {
return this->operator+=(s.string());}
#endif
syntax highlighted by Code2HTML, v. 0.9.1