Newer
Older
/***************************************************************************
-------------------
begin : 2004/04/10 16:35
copyright : (C) 2004 by Tomas Oberhuber
***************************************************************************/
/* See Copyright Notice in tnl/Copyright */
#ifndef __MSTRING_H__
#define __MSTRING_H__
#include <stdio.h>
#include <iostream>
#include <sstream>
#include "mpi-supp.h"
using namespace :: std;
Tomáš Oberhuber
committed
template< class T > class tnlList;
class tnlFile;
//! Class for managing strings
{
//! Pointer to char ended with zero
char* string;
//! Length of the allocated piece of memory
int length;
public:
//! Basic constructor
//! Constructor with char pointer
/*! @param prefix_cut_off says length of the prefix that is going to be omitted and
@param sufix_cut_off says the same about sufix.
*/
Tomáš Oberhuber
committed
int prefix_cut_off = 0,
int sufix_cut_off = 0 );
static tnlString getType();
//! Copy constructor
Tomáš Oberhuber
committed
//! Convert number to a string
tnlString( unsigned number );
Tomáš Oberhuber
committed
tnlString( int number );
tnlString( long int number );
tnlString( float number );
tnlString( double number );
Tomáš Oberhuber
committed
//! Set string from given char pointer
/*! @param prefix_cut_off says length of the prefix that is going to be omitted and
@param sufix_cut_off says the same about sufix.
*/
Tomáš Oberhuber
committed
void setString( const char* c,
int prefix_cut_off = 0,
int sufix_cut_off = 0 );
Tomáš Oberhuber
committed
//! Return pointer to data
const char* getString() const;
//! Return pointer to data
char* getString();
//! Operator for accesing particular chars of the string
const char& operator[]( int i ) const;
//! Operator for accesing particular chars of the string
char& operator[]( int i );
/****
* TODO: the operators do not work properly
* for example tnlString + const char*
*/
tnlString& operator = ( const tnlString& str );
//! Operator +=
tnlString& operator += ( const char* str );
Tomáš Oberhuber
committed
//! Operator +=
tnlString& operator += ( const char str );
//! Operator +=
tnlString& operator += ( const tnlString& str );
//! Operator +
tnlString operator + ( const tnlString& str ) const;
tnlString operator + ( const char* str ) const;
bool operator == ( const tnlString& str ) const;
bool operator != ( const tnlString& str ) const;
//! Comparison operator
bool operator == ( const char* ) const;
//! Comparison operator
bool operator != ( const char* ) const;
//! Retyping operator
operator bool () const;
//! Return length of the string
Tomáš Oberhuber
committed
int getLength() const;
void replace( const tnlString& pattern,
const tnlString& replaceWith );
Tomáš Oberhuber
committed
// TODO: remove
//! Write to a binary file
bool save( ostream& file ) const;
// TODO: remove
//! Read from binary file
bool load( istream& file );
//! Write to a binary file
Tomáš Oberhuber
committed
bool save( tnlFile& file ) const;
//! Read from binary file
Tomáš Oberhuber
committed
bool load( tnlFile& file );
//! Broadcast to other nodes in MPI cluster
void MPIBcast( int root, MPI_Comm mpi_comm = MPI_COMM_WORLD );
Tomáš Oberhuber
committed
//! Read one line from given stream.
bool getLine( istream& stream );
//! Parse the string into list of strings w.r.t. given separator.
int parse( tnlList< tnlString >& list, const char separator = ' ' ) const;
friend ostream& operator << ( ostream& stream, const tnlString& str );
tnlString operator + ( const char* string1, const tnlString& string2 );
ostream& operator << ( ostream& stream, const tnlString& str );
template< typename T >
tnlString convertToString( const T& value )
{
std::stringstream str;
str << value;
return tnlString( str.str().data() );
};
template<> inline tnlString convertToString( const bool& b )
{
if( b ) return "true";
return "false";
}