OW_String.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * Copyright (C) 2001-2004 Vintela, Inc. All rights reserved.
00003 *
00004 * Redistribution and use in source and binary forms, with or without
00005 * modification, are permitted provided that the following conditions are met:
00006 *
00007 *  - Redistributions of source code must retain the above copyright notice,
00008 *    this list of conditions and the following disclaimer.
00009 *
00010 *  - Redistributions in binary form must reproduce the above copyright notice,
00011 *    this list of conditions and the following disclaimer in the documentation
00012 *    and/or other materials provided with the distribution.
00013 *
00014 *  - Neither the name of Vintela, Inc. nor the names of its
00015 *    contributors may be used to endorse or promote products derived from this
00016 *    software without specific prior written permission.
00017 *
00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS
00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00028 * POSSIBILITY OF SUCH DAMAGE.
00029 *******************************************************************************/
00030 
00036 #ifndef OW_STRING_HPP_INCLUDE_GUARD_
00037 #define OW_STRING_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_Types.hpp"
00040 #include "OW_COWIntrusiveReference.hpp"
00041 #include "OW_CommonFwd.hpp"
00042 #include "OW_CIMFwd.hpp"
00043 #include "OW_Exception.hpp"
00044 #include <iosfwd>
00045 
00046 namespace OW_NAMESPACE
00047 {
00048 
00049 OW_DECLARE_APIEXCEPTION(StringConversion, OW_COMMON_API);
00050 
00063 class OW_COMMON_API String
00064 {
00065 public:
00066    class ByteBuf;
00070    String();
00077    explicit String(Int32 val);
00084    explicit String(UInt32 val);
00085 // do this check so we fill in the gaps and have int, long & long long constructors if necessary
00086 #if defined(OW_INT32_IS_INT) && defined(OW_INT64_IS_LONG_LONG)
00087 
00093    explicit String(long val);
00100    explicit String(unsigned long val);
00101 #endif
00102 
00108    explicit String(Int64 val);
00115    explicit String(UInt64 val);
00122    explicit String(Real32 val);
00129    explicit String(Real64 val);
00135    String(const char* str);
00142    explicit String(const Char16Array& ra) OW_DEPRECATED;
00149    explicit String(Bool parm) OW_DEPRECATED;
00156    explicit String(const Char16& parm) OW_DEPRECATED;
00163    explicit String(const CIMDateTime& parm) OW_DEPRECATED;
00170    explicit String(const CIMObjectPath& parm) OW_DEPRECATED;
00171    enum ETakeOwnershipFlag
00172    {
00173       E_TAKE_OWNERSHIP
00174    };
00186    explicit String(ETakeOwnershipFlag, char* allocatedMemory, size_t len);
00193    explicit String(const char* str, size_t len);
00201    String(const String& arg);
00206    explicit String(char c);
00210    ~String();
00214    void swap(String& x);
00221    char* allocateCString() const;
00225    size_t length() const;
00231    size_t UTF8Length() const;
00235    bool empty() const { return length() == 0; }
00244    int format(const char* fmt, ...);
00245    enum EReturnDelimitersFlag
00246    {
00247       E_DISCARD_TOKENS, // deprecated in 3.1.0
00248       E_RETURN_TOKENS, // deprecated in 3.1.0
00249       E_DISCARD_DELIMITERS,
00250       E_RETURN_DELIMITERS
00251    };
00252    enum EEmptyTokenReturnFlag
00253    {
00254       E_SKIP_EMPTY_TOKENS,
00255       E_RETURN_EMPTY_TOKENS
00256    };
00270    StringArray tokenize(const char* delims = " \n\r\t\v",
00271       EReturnDelimitersFlag returnDelimitersAsTokens = E_DISCARD_DELIMITERS,
00272       EEmptyTokenReturnFlag returnEmptyTokens = E_SKIP_EMPTY_TOKENS ) const;
00277    const char* c_str() const;
00282    OW_DEPRECATED const char* getBytes() const  {  return c_str(); }
00289    char charAt(size_t ndx) const;
00297    int compareTo(const String& arg) const;
00305    int compareTo(const char* arg) const;
00313    int compareToIgnoreCase(const String& arg) const;
00321    int compareToIgnoreCase(const char* arg) const;
00327    String& concat(const char* arg);
00328 
00334    String& concat(const String& arg)
00335    {
00336       return concat(arg.c_str());
00337    }
00338 
00344    String& concat(char arg);
00345    enum EIgnoreCaseFlag
00346    {
00347       E_CASE_SENSITIVE,
00348       E_CASE_INSENSITIVE
00349    };
00358    bool endsWith(const char* arg, EIgnoreCaseFlag ignoreCase = E_CASE_SENSITIVE) const;
00359 
00369    bool endsWith(const String& arg, EIgnoreCaseFlag ignoreCase = E_CASE_SENSITIVE) const
00370    {
00371       return endsWith(arg.c_str(), ignoreCase);
00372    }
00373 
00380    bool endsWith(char arg) const;
00381 
00389    bool equals(const String& arg) const;
00397    bool equals(const char* arg) const;
00406    bool equalsIgnoreCase(const String& arg) const;
00415    bool equalsIgnoreCase(const char* arg) const;
00419    UInt32 hashCode() const;
00428    size_t indexOf(char ch, size_t fromIndex=0) const;
00436    size_t indexOf(const char* arg, size_t fromIndex=0) const;
00444    size_t indexOf(const String& arg, size_t fromIndex=0) const
00445    {
00446       return indexOf(arg.c_str(), fromIndex);
00447    }
00448 
00457    size_t lastIndexOf(char ch, size_t fromIndex=npos) const;
00466    size_t lastIndexOf(const char* arg, size_t fromIndex=npos) const;
00475    size_t lastIndexOf(const String& arg, size_t fromIndex=npos) const
00476    {
00477       return lastIndexOf(arg.c_str(), fromIndex);
00478    }
00479 
00488    bool startsWith(const char* arg, EIgnoreCaseFlag ignoreCase = E_CASE_SENSITIVE) const;
00497    bool startsWith(const String& arg, EIgnoreCaseFlag ignoreCase = E_CASE_SENSITIVE) const
00498    {
00499       return startsWith(arg.c_str(), ignoreCase);
00500    }
00507    bool startsWith(char arg) const;
00508 
00517    String substring(size_t beginIndex,
00518       size_t length=npos) const;
00523    bool isSpaces() const;
00529    String& toLowerCase();
00535    String& toUpperCase();
00541    String& ltrim();
00547    String& rtrim();
00554    String& trim();
00560    String& erase();
00561    
00567    String& erase( size_t idx, size_t len = npos );
00574    String& operator= (const String & arg);
00582    const char& operator[] (size_t ndx) const;
00583    char& operator[] (size_t ndx);
00590    String& operator+= (const String& arg) { return concat(arg); }
00597    String& operator+= (const char* arg) { return concat(arg); }
00604    String& operator+= (char arg) { return concat(arg); }
00611    void readObject(std::istream& istrm);
00617    void writeObject(std::ostream& ostrm) const;
00621    String toString() const;
00627    Char16 toChar16() const OW_DEPRECATED;
00632    Real32 toReal32() const;
00637    Real64 toReal64() const;
00643    bool toBool() const;
00648    UInt8 toUInt8(int base=10) const;
00653    Int8 toInt8(int base=10) const;
00658    UInt16 toUInt16(int base=10) const;
00663    Int16 toInt16(int base=10) const;
00668    UInt32 toUInt32(int base=10) const;
00673    Int32 toInt32(int base=10) const;
00678    UInt64 toUInt64(int base=10) const;
00683    Int64 toInt64(int base=10) const;
00688    unsigned int toUnsignedInt(int base=10) const;
00693    int toInt(int base=10) const;
00699    CIMDateTime toDateTime() const OW_DEPRECATED;
00710    static unsigned long long int strtoull(const char* nptr, char** endptr,
00711       int base);
00722    static long long int strtoll(const char* nptr, char** endptr, int base);
00730    static const char* strchr(const char* theStr, int c);
00739    static String getLine(std::istream& istr);
00740 
00741 #if defined(OW_AIX)
00742    static const size_t npos;
00743 #else
00744    static const size_t npos = size_t(~0);
00745 #endif // OW_AIX
00746 
00747 #ifdef OW_WIN32
00748 #pragma warning (push)
00749 #pragma warning (disable: 4251)
00750 #endif
00751 
00752    typedef COWIntrusiveReference<ByteBuf> buf_t;
00753 private:
00754    buf_t m_buf;
00755 
00756 #ifdef OW_WIN32
00757 #pragma warning (pop)
00758 #endif
00759 
00760 };
00761 OW_EXPORT_TEMPLATE(OW_COMMON_API, Array, String);
00762 OW_EXPORT_TEMPLATE(OW_COMMON_API, Enumeration, String);
00763 
00764 OW_COMMON_API std::ostream& operator<< (std::ostream& ostr, const String& arg);
00765 OW_COMMON_API String operator + (const String& s1, const String& s2);
00766 OW_COMMON_API String operator + (const char* p, const String& s);
00767 OW_COMMON_API String operator + (const String& s, const char* p);
00768 OW_COMMON_API String operator + (char c, const String& s);
00769 OW_COMMON_API String operator + (const String& s, char c);
00770 inline bool
00771 operator == (const String& s1, const String& s2)
00772 {
00773    return (s1.compareTo(s2) == 0);
00774 }
00775 inline bool
00776 operator == (const String& s, const char* p)
00777 {
00778    return (s.compareTo(p) == 0);
00779 }
00780 inline bool
00781 operator == (const char* p, const String& s)
00782 {
00783    return (s.compareTo(p) == 0);
00784 }
00785 inline bool
00786 operator != (const String& s1, const String& s2)
00787 {
00788    return (s1.compareTo(s2) != 0);
00789 }
00790 inline bool
00791 operator != (const String& s, const char* p)
00792 {
00793    return (s.compareTo(p) != 0);
00794 }
00795 inline bool
00796 operator != (const char* p, const String& s)
00797 {
00798    return (s.compareTo(p) != 0);
00799 }
00800 inline bool
00801 operator < (const String& s1, const String& s2)
00802 {
00803    return (s1.compareTo(s2) < 0);
00804 }
00805 inline bool
00806 operator < (const String& s, const char* p)
00807 {
00808    return (s.compareTo(p) < 0);
00809 }
00810 inline bool
00811 operator < (const char* p, const String& s)
00812 {
00813    return (String(p).compareTo(s) < 0);
00814 }
00815 inline bool
00816 operator <= (const String& s1, const String& s2)
00817 {
00818    return (s1.compareTo(s2) <= 0);
00819 }
00820 inline bool
00821 operator <= (const String& s, const char* p)
00822 {
00823    return (s.compareTo(p) <= 0);
00824 }
00825 inline bool
00826 operator <= (const char* p, const String& s)
00827 {
00828    return (String(p).compareTo(s) <= 0);
00829 }
00830 inline bool
00831 operator > (const String& s1, const String& s2)
00832 {
00833    return (s1.compareTo(s2) > 0);
00834 }
00835 inline bool
00836 operator > (const String& s, const char* p)
00837 {
00838    return (s.compareTo(p) > 0);
00839 }
00840 inline bool
00841 operator > (const char* p, const String& s)
00842 {
00843    return (String(p).compareTo(s) > 0);
00844 }
00845 inline bool
00846 operator >= (const String& s1, const String& s2)
00847 {
00848    return (s1.compareTo(s2) >= 0);
00849 }
00850 inline bool
00851 operator >= (const String& s, const char* p)
00852 {
00853    return (s.compareTo(p) >= 0);
00854 }
00855 inline bool
00856 operator >= (const char* p, const String& s)
00857 {
00858    return (String(p).compareTo(s) >= 0);
00859 }
00860 
00861 } // end namespace OW_NAMESPACE
00862 
00863 #endif

Generated on Thu Feb 9 08:48:16 2006 for openwbem by  doxygen 1.4.6