/* * $Revision: 2619 $ * * last checkin: * $Author: gutwenger $ * $Date: 2012-07-16 16:05:39 +0200 (Mo, 16. Jul 2012) $ ***************************************************************/ /** \file * \brief Declaration of class String. * * \author Carsten Gutwenger * * \par License: * This file is part of the Open Graph Drawing Framework (OGDF). * * \par * Copyright (C)
* See README.txt in the root directory of the OGDF installation for details. * * \par * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * Version 2 or 3 as published by the Free Software Foundation; * see the file LICENSE.txt included in the packaging of this file * for details. * * \par * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * \par * You should have received a copy of the GNU General Public * License along with this program; if not, write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * * \see http://www.gnu.org/copyleft/gpl.html ***************************************************************/ #ifdef _MSC_VER #pragma once #endif #ifndef OGDF_STRING_H #define OGDF_STRING_H #include "basic.h" #include "Hashing.h" #define OGDF_STRING_BUFFER_SIZE 1024 namespace ogdf { //! Representation of character strings. /** * Strings are internally stored as an Ascii character array. The positions * within a string a numbered 0,1,... */ class OGDF_EXPORT String { char *m_pChar; //!< Pointer to characters. size_t m_length; //!< The length of the string (number of characters). static char s_pBuffer[OGDF_STRING_BUFFER_SIZE]; //!< Temporary buffer used by sprintf(). public: //! Constructs an empty string, i.e., a string with length 0. String(); //! Constructs a string consisting of a single character \a c. String(const char c); //! Constructs a string that is a copy of \a str. String(const char *str); //String(const char *format, ...); //! Constructs a string consisting of the first \a maxLen characters of \a str. /** * @param maxLen is the number of characters to be copied from the begin of \a str. * If \a str is shorter than \a maxLen, then the complete string is copied. * @param str is the string to be copied. */ String(size_t maxLen, const char *str); //! Constructs a string that is a copy of \a str. String(const String &str); ~String(); //! Cast a string into a 0-terminated C++ string. //operator const char *() const { return m_pChar; } const char *cstr() const { return m_pChar; } //! Returns the length of the string. size_t length() const { return m_length; } //! Returns a reference to the character at position \a i. char &operator[](size_t i) { OGDF_ASSERT(i < m_length) return m_pChar[i]; } //! Returns a reference to the character at position \a i. const char &operator[](size_t i) const { OGDF_ASSERT(i < m_length) return m_pChar[i]; } //! Equality operator. friend bool operator==(const String &x, const String &y) { return (compare(x,y) == 0); } //! Equality operator. friend bool operator==(const char *x, const String &y) { return (compare(x,y) == 0); } //! Equality operator. friend bool operator==(const String &x, const char *y) { return (compare(x,y) == 0); } //! Inequality operator. friend bool operator!=(const String &x, const String &y) { return (compare(x,y) != 0); } //! Inequality operator. friend bool operator!=(const char *x, const String &y) { return (compare(x,y) != 0); } //! Inequality operator. friend bool operator!=(const String &x, const char *y) { return (compare(x,y) != 0); } //! Less than operator. friend bool operator<(const String &x, const String &y) { return (compare(x,y) < 0); } //! Less than operator. friend bool operator<(const char *x, const String &y) { return (compare(x,y) < 0); } //! Less than operator. friend bool operator<(const String &x, const char *y) { return (compare(x,y) < 0); } //! Less or equal than operator. friend bool operator<=(const String &x, const String &y) { return (compare(x,y) <= 0); } //! Less or equal than operator. friend bool operator<=(const char *x, const String &y) { return (compare(x,y) <= 0); } //! Less or equal than operator. friend bool operator<=(const String &x, const char *y) { return (compare(x,y) <= 0); } //! Greater than operator. friend bool operator>(const String &x, const String &y) { return (compare(x,y) > 0); } //! Greater than operator. friend bool operator>(const char *x, const String &y) { return (compare(x,y) > 0); } //! Greater than operator. friend bool operator>(const String &x, const char *y) { return (compare(x,y) > 0); } //! Greater or equal than operator. friend bool operator>=(const String &x, const String &y) { return (compare(x,y) >= 0); } //! Greater or equal than operator. friend bool operator>=(const char *x, const String &y) { return (compare(x,y) >= 0); } //! Greater or equal than operator. friend bool operator>=(const String &x, const char *y) { return (compare(x,y) >= 0); } //! Assignment operator. String &operator=(const String &str); //! Assignment operator. String &operator=(const char *str); //! Appends string \a str to this string. String &operator+=(const String &str); //! Formatted assignment operator. /** * Behaves essentially like the C function \c printf(). */ void sprintf(const char *format, ...); //! Compare function for strings. static int compare (const String &x, const String &y); //! Input operator. friend istream& operator>>(istream& is, String &str); OGDF_NEW_DELETE }; //! Output operator for strings. inline ostream &operator<<(ostream &os, const String &str) { os << str.cstr(); return os; } template<> class DefHashFunc { public: int hash(const String &key) const; }; } // end namespace ogdf #endif