1 #ifndef __JLANG__JSTRING__
2 #define __JLANG__JSTRING__
21 namespace JPP {
using namespace JLANG; }
50 explicit JString(
const std::string& buffer) :
71 explicit JString(
const char* buffer,
const std::string::size_type length) :
72 std::string(buffer, length)
114 for (
int size = 1024; ; size <<= 1) {
118 va_start(args, format);
120 const int length = vsnprintf(buffer, size, format, args);
124 this->
assign(buffer, buffer + length);
146 istringstream is(*
this);
148 ios_base::iostate state;
150 facet.
get(is, istreambuf_iterator<char>(), is, state, *
this);
165 return this->size() >= prefix.size() && this->substr(0, prefix.size()) == prefix;
177 return this->size() >= suffix.size() && this->substr(this->size() - suffix.size()) == suffix;
190 const char replacement,
191 const std::size_t max = std::numeric_limits<std::size_t>::max())
193 for (std::size_t i = this->find(target),
n = max; i != std::string::npos &&
n != 0; i = find(target,i), --
n) {
194 (*this)[i] = replacement;
210 const std::string& replacement,
211 const std::size_t max = std::numeric_limits<std::size_t>::max())
213 for (std::size_t i = this->find(target),
n = max; i != std::string::npos &&
n != 0; i = this->find(target,i), --
n) {
214 replace(this->begin() + i, this->begin() + i + target.length(), replacement);
232 const std::size_t max = std::numeric_limits<std::size_t>::max())
234 for (std::size_t i = this->find(target),
n = max; i != std::string::npos &&
n != 0; i = this->find(target,i), --
n) {
235 replace(this->begin() + i, this->begin() + i + target.length(),
JString(value));
293 for (
iterator i = begin(); i != end(); ++i) {
308 for (
iterator i = begin(); i != end(); ++i) {
324 std::ostringstream os;
342 std::ostringstream os;
362 std::istringstream is(input);
382 istringstream is(*
this);
390 this->
assign(istreambuf_iterator<char>(is),
391 istreambuf_iterator<char>());
408 istream::sentry sentry(in);
412 const locale&
loc = in.getloc();
414 if (has_facet<JStringFacet>(
loc)) {
416 ios_base::iostate state;
418 use_facet<JStringFacet>(
loc).get(in, istreambuf_iterator<char>(), in, state,
object);
420 if (state != ios_base::goodbit && state != ios_base::eofbit) {
426 in >> static_cast<string&>(
object);
445 const locale&
loc = out.getloc();
447 if (has_facet<JStringFacet>(
loc)) {
449 use_facet<JStringFacet>(
loc).put(out, out, out.fill(), object);
453 out << static_cast<const string&>(
object);
472 istream::sentry sentry(in,
true);
476 const locale&
loc = in.getloc();
478 if (has_facet<JStringFacet>(
loc)) {
480 use_facet<JStringFacet>(
loc).getline(in,
object);
484 getline(in, static_cast<string&>(
object));