#ifndef __STRINGUTIL_H
#define __STRINGUTIL_H
#include <string>
#include <sstream>
#include <iostream>
#define LOWER( c ) ( (c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c) )
#define UPPER( c ) ( (c) >= 'a' && (c) <= 'z' ? (c)+'A'-'a' : (c) )
#include "strhash.h"
template <typename T>
inline std::string to_str (T a_T) {
std::ostringstream buffer;
buffer << a_T;
return buffer.str();
}
inline std::string &operator<< (std::string &dest, const char c) {
dest += c;
return dest;
}
inline std::string &operator<< (std::string &dest, const char *src) {
dest.append(src);
return dest;
}
inline std::string &operator<< (std::string &dest, const std::string &src) {
dest.append(src);
return dest;
}
inline std::string &operator<< (std::string &dest, int insertion) {
dest.append(to_str(insertion));
return dest;
}
inline std::string &operator<< (std::string &dest, unsigned int insertion) {
dest.append(to_str(insertion));
return dest;
}
inline std::string string_eval_tabs (const int maxlength, const int length) {
std::string tabs(1, '\t');
return tabs;
}
int strcasecmp (const char *str1, const char *str2);
int strncasecmp (const char *str1, const char *str2, unsigned int len);
inline int strcasecmp (const std::string &str1, const std::string &str2) {
return strcasecmp(str1.c_str(), str2.c_str());
}
inline int strncasecmp (const std::string &str1, const std::string &str2, unsigned int len) {
return strncasecmp(str1.c_str(), str2.c_str(), len);
}
bool str_cmp( std::string string1, std::string string2 );
bool str_cmp( std::string &string1, char * string2 );
bool str_cmp( char * string1, std::string &string2 );
bool str_cmp( char * string1, char * string2 );
bool str_prefix( std::string &string1, std::string &string2 );
bool str_prefix( std::string &string1, char * string2 );
bool str_prefix( char * string1, std::string &string2 );
bool str_prefix( char * string1, char * string2 );
bool str_str( char * string1, char * string2 );
bool str_str( std::string string1, std::string string2 );
char * str_dup( const char *str );
#endif