1
0
Fork 0
flightgear/src/FDM/JSBSim/input_output/string_utilities.h
2013-11-24 20:12:17 +01:00

199 lines
5.6 KiB
C++

/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Header: string_utilities.h
Author: Jon S. Berndt
Date started: 06/01/09
------------- Copyright (C) 2009 Jon S. Berndt (jon@jsbsim.org) -------------
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
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 Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA.
Further information about the GNU Lesser General Public License can also be found on
the world wide web at http://www.gnu.org.
HISTORY
--------------------------------------------------------------------------------
06/01/09 JSB Created
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SENTRY
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#ifndef STRINGUTILS_H
#define STRINGUTILS_H
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INCLUDES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <stdio.h>
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#define ID_STRINGUTILS "$Id: string_utilities.h,v 1.16 2013/11/17 05:14:21 jberndt Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CLASS DOCUMENTATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CLASS DECLARATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#if !defined(BASE)
extern std::string& trim_left(std::string& str);
extern std::string& trim_right(std::string& str);
extern std::string& trim(std::string& str);
extern std::string& trim_all_space(std::string& str);
extern std::string& to_upper(std::string& str);
extern std::string& to_lower(std::string& str);
extern bool is_number(const std::string& str);
std::vector <std::string> split(std::string str, char d);
/* Comment out to_string functions when they are defined already - C++ 11 defines these */
extern std::string to_string(int);
extern std::string to_string(double);
extern std::string to_string(float);
extern std::string replace(std::string str, const std::string& old, const std::string& newstr);
#else
#include <cctype>
using namespace std;
string& trim_left(string& str)
{
while (str.size() && isspace((unsigned char)str[0])) {
str = str.erase(0,1);
}
return str;
}
string& trim_right(string& str)
{
while (str.size() && isspace((unsigned char)str[str.size()-1])) {
str = str.erase(str.size()-1,1);
}
return str;
}
string& trim(string& str)
{
if (str.size() == 0) return str;
string temp_str = trim_right(str);
return str = trim_left(temp_str);
}
string& trim_all_space(string& str)
{
for (size_t i=0; i<str.size(); i++) {
if (isspace((unsigned char)str[i])) {
str = str.erase(i,1);
--i;
}
}
return str;
}
string& to_upper(string& str)
{
for (size_t i=0; i<str.size(); i++) str[i] = toupper(str[i]);
return str;
}
string& to_lower(string& str)
{
for (size_t i=0; i<str.size(); i++) str[i] = tolower(str[i]);
return str;
}
bool is_number(const string& str)
{
if (str.size())
return (str.find_first_not_of("+-.0123456789Ee") == string::npos);
else
return false;
}
vector <string> split(string str, char d)
{
vector <string> str_array;
size_t index=0;
string temp = "";
trim(str);
index = str.find(d);
while (index != string::npos) {
temp = str.substr(0,index);
trim(temp);
if (temp.size() > 0) str_array.push_back(temp);
str = str.erase(0,index+1);
index = str.find(d);
}
if (str.size() > 0) {
temp = trim(str);
if (temp.size() > 0) str_array.push_back(temp);
}
return str_array;
}
/* Comment out to_string functions when they are defined already - C++ 11 defines these */
string to_string(int i)
{
char buffer[32];
sprintf(buffer, "%d", i);
return string(buffer);
}
string to_string(float x)
{
std::ostringstream o;
if (!(o << x)) cerr << "Bad float to string conversion" << endl;
return o.str();
}
string to_string(double x)
{
std::ostringstream o;
if (!(o << x)) cerr << "Bad double to string conversion" << endl;
return o.str();
}
string replace(string str, const string& oldstr, const string& newstr)
{
int old_idx;
string temp;
old_idx = str.find(oldstr);
if (old_idx >= 0) {
temp = str.replace(old_idx, 1, newstr);
}
return temp;
}
#endif
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#endif