45 #define DDC_ICONV_BUFLEN 256 48 #define DDC_ICONV_PTHREAD 1 50 #ifdef DDC_ICONV_PTHREAD 84 ddcIconv(
const std::string &srcEncoding=
"",
const std::string &dstEncoding=
"")
89 PTOP(pthread_mutex_init(&mut,NULL);)
90 if (!open(srcEncoding,dstEncoding))
98 PTOP(pthread_mutex_destroy(&mut);)
109 return (enc_src.empty() || enc_src==
"-" || enc_dst.empty() || enc_dst==
"-");
115 return ic != (iconv_t)-1;
121 return empty() || valid();
128 inline bool open(
const std::string &srcEncoding,
const std::string dstEncoding)
131 PTOP(pthread_mutex_lock(&mut);)
132 enc_src = srcEncoding;
133 enc_dst = dstEncoding;
135 ic = iconv_open(enc_dst.c_str(), enc_src.c_str());
136 PTOP(pthread_mutex_unlock(&mut);)
142 if (!empty() && valid() && iconv_close(ic)==-1)
return false;
143 PTOP(pthread_mutex_lock(&mut);)
147 PTOP(pthread_mutex_unlock(&mut);)
153 if (!empty() && valid())
154 iconv(ic, NULL,NULL, NULL,NULL);
162 inline bool convert(
const char *idata,
const size_t ilen,
string &out)
164 if (!idata || !*idata) {
170 PTOP(pthread_mutex_lock(&mut);)
178 char *iptr=ibuf, *optr=obuf;
181 memcpy(ibuf, idata+(ilen-itodo), ileft);
184 size_t nx = iconv(ic, &iptr, &ileft, &optr, &oleft);
185 if (nx==(
size_t)-1) {
200 out.push_back(*iptr);
207 PTOP(pthread_mutex_unlock(&mut);)
215 itodo -= (ileft0-ileft);
218 PTOP(pthread_mutex_unlock(&mut);)
223 inline bool convert(
const string &in,
string &out)
229 return convert(in.data(), in.size(), out);
233 inline std::string
convert(
const std::string &in)
243 #undef DDC_ICONV_BUFLEN 246 #endif //_DDC_ICONV_H Interface to iconv.h character-conversion routines.
Definition: ddcIconv.h:58
bool empty(void) const
Definition: ddcIconv.h:107
~ddcIconv(void)
Definition: ddcIconv.h:95
bool convert(const char *idata, const size_t ilen, string &out)
Definition: ddcIconv.h:162
bool good(void) const
Definition: ddcIconv.h:119
bool valid(void) const
Definition: ddcIconv.h:113
#define DDC_ICONV_BUFLEN
default buffer length (in bytes) for iconv conversions
Definition: ddcIconv.h:45
string enc_src
source encoding
Definition: ddcIconv.h:63
void reset(void)
Definition: ddcIconv.h:152
bool convert(const string &in, string &out)
Definition: ddcIconv.h:223
#define PTOP(x)
Definition: ddcIconv.h:52
bool open(const std::string &srcEncoding, const std::string dstEncoding)
Definition: ddcIconv.h:128
string enc_dst
destination encoding
Definition: ddcIconv.h:64
bool close(void)
Definition: ddcIconv.h:141
iconv_t ic
underlying iconv object
Definition: ddcIconv.h:71
ddcIconv(const std::string &srcEncoding="", const std::string &dstEncoding="")
Definition: ddcIconv.h:84
std::string convert(const std::string &in)
Definition: ddcIconv.h:233