You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
5.8 KiB
300 lines
5.8 KiB
// mk4str.inl --
|
|
// $Id$
|
|
// This is part of Metakit, the homepage is http://www.equi4.com/metakit/
|
|
|
|
/** @file
|
|
* Members of the string package which are usually inlined
|
|
*/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// c4_String
|
|
|
|
#if q4_MFC // Microsoft Foundation Classes
|
|
|
|
#elif q4_STD // STL and standard strings
|
|
|
|
/// Construct empty string
|
|
d4_inline c4_String::c4_String ()
|
|
{
|
|
}
|
|
|
|
d4_inline c4_String::c4_String (char ch_, int nDup_)
|
|
: string (nDup_, ch_)
|
|
{
|
|
}
|
|
|
|
d4_inline c4_String::c4_String (const char* str_)
|
|
: string (str_)
|
|
{
|
|
}
|
|
|
|
d4_inline c4_String::c4_String (const void* ptr_, int len_)
|
|
: string ((const char*) ptr_, len_)
|
|
{
|
|
}
|
|
|
|
d4_inline c4_String::c4_String (const d4_std::string& s_)
|
|
: string (s_)
|
|
{
|
|
}
|
|
|
|
d4_inline c4_String::c4_String (const c4_String& s_)
|
|
: string (s_)
|
|
{
|
|
}
|
|
|
|
d4_inline c4_String::~c4_String ()
|
|
{
|
|
}
|
|
|
|
d4_inline const c4_String& c4_String::operator= (const c4_String& s_)
|
|
{
|
|
*(string*) this = s_;
|
|
return *this;
|
|
}
|
|
|
|
d4_inline c4_String::operator const char* () const
|
|
{
|
|
return c_str();
|
|
}
|
|
|
|
d4_inline char c4_String::operator[] (int i) const
|
|
{
|
|
return at(i);
|
|
}
|
|
|
|
d4_inline c4_String operator+ (const c4_String& a_, const c4_String& b_)
|
|
{
|
|
return (d4_std::string) a_ + (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline c4_String operator+ (const c4_String& a_, const char* b_)
|
|
{
|
|
return (d4_std::string) a_ + (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline c4_String operator+ (const char* a_, const c4_String& b_)
|
|
{
|
|
return (d4_std::string) a_ + (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline const c4_String& c4_String::operator+= (const c4_String& s_)
|
|
{
|
|
*(string*) this += s_;
|
|
return *this;
|
|
}
|
|
|
|
d4_inline const c4_String& c4_String::operator+= (const char* s_)
|
|
{
|
|
*(string*) this += s_;
|
|
return *this;
|
|
}
|
|
|
|
d4_inline int c4_String::GetLength() const
|
|
{
|
|
return length();
|
|
}
|
|
|
|
d4_inline bool c4_String::IsEmpty() const
|
|
{
|
|
return empty();
|
|
}
|
|
|
|
d4_inline void c4_String::Empty()
|
|
{
|
|
erase();
|
|
}
|
|
|
|
d4_inline c4_String c4_String::Left(int nCount_) const
|
|
{
|
|
if (nCount_ > length())
|
|
nCount_ = length();
|
|
return substr(0, nCount_);
|
|
}
|
|
|
|
d4_inline c4_String c4_String::Right(int nCount_) const
|
|
{
|
|
if (nCount_ > length())
|
|
nCount_ = length();
|
|
return substr(length() - nCount_, nCount_);
|
|
}
|
|
|
|
d4_inline int c4_String::Compare(const char* str_) const
|
|
{
|
|
return compare(str_);
|
|
}
|
|
|
|
d4_inline bool c4_String::operator< (const c4_String& str_) const
|
|
{
|
|
return compare(str_) < 0;
|
|
}
|
|
|
|
d4_inline int c4_String::Find(char ch_) const
|
|
{
|
|
return find(ch_);
|
|
}
|
|
|
|
d4_inline int c4_String::ReverseFind(char ch_) const
|
|
{
|
|
return rfind(ch_);
|
|
}
|
|
|
|
d4_inline int c4_String::FindOneOf(const char* set_) const
|
|
{
|
|
return find_first_of(set_);
|
|
}
|
|
|
|
d4_inline int c4_String::Find(const char* sub_) const
|
|
{
|
|
return find(sub_);
|
|
}
|
|
|
|
d4_inline c4_String c4_String::SpanIncluding(const char* set_) const
|
|
{
|
|
return substr(0, find_first_not_of(set_));
|
|
}
|
|
|
|
d4_inline c4_String c4_String::SpanExcluding(const char* set_) const
|
|
{
|
|
return substr(0, find_first_of(set_));
|
|
}
|
|
|
|
d4_inline bool operator== (const c4_String& a_, const c4_String& b_)
|
|
{
|
|
return (d4_std::string) a_ == (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline bool operator!= (const c4_String& a_, const c4_String& b_)
|
|
{
|
|
return (d4_std::string) a_ != (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline bool operator== (const c4_String& a_, const char* b_)
|
|
{
|
|
return (d4_std::string) a_ == (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline bool operator== (const char* a_, const c4_String& b_)
|
|
{
|
|
return (d4_std::string) a_ == (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline bool operator!= (const c4_String& a_, const char* b_)
|
|
{
|
|
return (d4_std::string) a_ != (d4_std::string) b_;
|
|
}
|
|
|
|
d4_inline bool operator!= (const char* a_, const c4_String& b_)
|
|
{
|
|
return (d4_std::string) a_ != (d4_std::string) b_;
|
|
}
|
|
|
|
#else // Universal replacement classes
|
|
|
|
/// Construct empty string
|
|
d4_inline c4_String::c4_String ()
|
|
{
|
|
Init(0, 0);
|
|
}
|
|
|
|
/// Construct string from Pascal-style <count,chars...> data
|
|
d4_inline c4_String::c4_String (const unsigned char* ptr)
|
|
{
|
|
Init(ptr + 1, ptr ? *ptr : 0);
|
|
}
|
|
|
|
/// Construct string from a specified area in memory
|
|
d4_inline c4_String::c4_String (const void* ptr, int len)
|
|
{
|
|
Init(ptr, len);
|
|
}
|
|
|
|
d4_inline const c4_String& c4_String::operator+= (const c4_String& s)
|
|
{
|
|
return *this = *this + s;
|
|
}
|
|
|
|
d4_inline const c4_String& c4_String::operator+= (const char* s)
|
|
{
|
|
return *this += (c4_String) s;
|
|
}
|
|
|
|
d4_inline const char* c4_String::Data() const
|
|
{
|
|
return (const char*) (_value + 2);
|
|
}
|
|
|
|
d4_inline c4_String::operator const char* () const
|
|
{
|
|
return Data();
|
|
}
|
|
|
|
d4_inline c4_String::operator const unsigned char* () const
|
|
{
|
|
return (unsigned char*) Data() - 1;
|
|
}
|
|
|
|
d4_inline char c4_String::operator[] (int i) const
|
|
{
|
|
return Data()[i];
|
|
}
|
|
|
|
d4_inline int c4_String::GetLength() const
|
|
{
|
|
return _value[1] != 255 ? _value[1] : FullLength();
|
|
}
|
|
|
|
d4_inline bool c4_String::IsEmpty() const
|
|
{
|
|
return GetLength() == 0;
|
|
}
|
|
|
|
d4_inline void c4_String::Empty()
|
|
{
|
|
*this = "";
|
|
}
|
|
|
|
d4_inline bool c4_String::operator< (const c4_String& a) const
|
|
{
|
|
return Compare(a) < 0;
|
|
}
|
|
|
|
d4_inline c4_String operator+ (const char* a, const c4_String& b)
|
|
{
|
|
return (c4_String) a + b;
|
|
}
|
|
|
|
d4_inline c4_String operator+ (const c4_String& a, const char* b)
|
|
{
|
|
return a + (c4_String) b;
|
|
}
|
|
|
|
d4_inline bool operator== (const char* a, const c4_String& b)
|
|
{
|
|
return b.Compare(a) == 0;
|
|
}
|
|
|
|
d4_inline bool operator== (const c4_String& a, const char* b)
|
|
{
|
|
return a.Compare(b) == 0;
|
|
}
|
|
|
|
d4_inline bool operator!= (const c4_String& a, const c4_String& b)
|
|
{
|
|
return !(a == b);
|
|
}
|
|
|
|
d4_inline bool operator!= (const char* a, const c4_String& b)
|
|
{
|
|
return b.Compare(a) != 0;
|
|
}
|
|
|
|
d4_inline bool operator!= (const c4_String& a, const char* b)
|
|
{
|
|
return a.Compare(b) != 0;
|
|
}
|
|
|
|
#endif // q4_UNIV
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|