本文整理汇总了C++中str::len方法的典型用法代码示例。如果您正苦于以下问题:C++ str::len方法的具体用法?C++ str::len怎么用?C++ str::len使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类str
的用法示例。
在下文中一共展示了str::len方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
dhashclient::retrieve (bigint key, dhash_ctype ct, cb_cret cb, str& data,
ptr<option_block> options)
{
ref<dhash_retrieve_res> res = New refcounted<dhash_retrieve_res> (DHASH_OK);
dhash_retrieve_arg arg;
arg.blockID = key;
arg.ctype = ct;
arg.options = 0;
if (options) {
arg.options = options->flags;
if (options->flags & DHASHCLIENT_GUESS_SUPPLIED) {
arg.guess = options->guess;
//warn << "starting with guess: " << arg.guess << "\n";
//warn << "using guess\n";
}
}
// Praveen
if (data.len()) {
arg.data.setsize (data.len());
memcpy (arg.data.base (), data.cstr(), data.len());
}
gwclnt->call (DHASHPROC_RETRIEVE, &arg, res,
wrap (this, &dhashclient::retrievecb, cb, key, res));
}
示例2: out
str
html_wss (str in)
{
if (!in) return in;
mstr out (in.len ());
char *op = out.cstr ();
const char *ip = in.cstr ();
const char *ep = ip + in.len ();
bool eat_ws_state = false;
for ( ; ip < ep; ip++) {
if (isspace (*ip)) {
if (!eat_ws_state) {
eat_ws_state = true;
}
} else {
if (eat_ws_state) {
*op++ = ' ';
eat_ws_state = false;
}
*op++ = *ip;
}
}
if (eat_ws_state) { *op++ = ' '; }
out.setlen (op - out.cstr ());
return out;
}
示例3: wrap
void
dhblock_keyhash_srv::real_store (chordID key, str od, str nd, u_int32_t exp, cb_dhstat cb)
{
u_int32_t v1 = dhblock_keyhash::version (nd.cstr (), nd.len ());
if (od.len ()) {
u_int32_t v0 = dhblock_keyhash::version (od.cstr (), od.len ());
if (v0 > v1) {
chordID p = node->my_pred ()->id ();
chordID m = node->my_ID ();
if (betweenrightincl (p, m, key))
cb (DHASH_STALE);
else
cb (DHASH_RETRY);
} else {
info << "db delete: " << key << "\n";
db->remove (key, v0,
wrap (this, &dhblock_keyhash_srv::delete_cb, key,
nd, v1, exp, cb));
}
} else {
info << "db write: " << node->my_ID ()
<< " N " << key << " " << nd.len () << "\n";
db_store (key, nd, v1, exp, cb);
}
}
示例4: substr
inline str
group_prefix (str s, str prefix)
{
if (s.len () <= prefix.len () || s[prefix.len ()] != '.'
|| memcmp (s.cstr (), prefix.cstr (), prefix.len ()))
return NULL;
return substr (s, prefix.len () + 1);
}
示例5: write
bool
siglog (const str &line)
{
if (!line) return false;
int n = write (logfd, line.cstr (), line.len ());
if (n < int (line.len ()))
return false;
return true;
}
示例6:
void
suio_print (suio *uio, const str &s)
{
if (s.len () <= suio::smallbufsize)
uio->copy (s.cstr (), s.len ());
else {
uio->print (s.cstr (), s.len ());
uio->iovcb (wrap (&s.b.Xplug, s.b.Xleak ()));
}
}
示例7: m
str
trunc_at_first_null (const str &s)
{
assert (s);
const char *cp;
size_t len = s.len ();
size_t l;
const char nullc = '\0';
// Figure out if a '\0' or the end-of-string comes first.
for (cp = s.cstr (), l = 0; *cp != nullc && l < len; cp++, l++);
str ret;
if (*cp == nullc) {
// The most likely outcome
if (l == len) ret = s;
// There was a '\0' inside the string
else ret = s.cstr ();
} else {
// String is not null terminated!
mstr m (len + 1);
memcpy (m.cstr (), s.cstr (), len);
m[len] = nullc;
ret = m;
}
return ret;
}
示例8: assert
bool
basename_dirname (const str &in, str *d, str *b)
{
size_t l = in.len ();
if (l == 0) {
*d = *b = NULL;
return false;
}
bool ret = (in[0] == '/');
const char *bp = in.cstr ();
const char *ep = bp + l - 1;
const char *p;
for ( p = ep; p >= bp && *p != '/'; p--) ;
// Set the basename if possible
if (p == ep) {
*b = NULL;
} else {
*b = str (p + 1);
}
// if there were multiple slashes keep backing up
for ( ; p >= bp && *p == '/' ; p-- );
if (p >= bp) {
assert (*p != '/');
*d = str (bp, p - bp + 1);
} else {
*d = NULL;
}
return ret;
}
示例9:
bool
is_safe (const str &d)
{
if (!d || d[0] == '.' || d[d.len () - 1] == '.' || safe_rxx.search (d))
return false;
return true;
}
示例10: defined
sth_t
mysql_t::prepare (const str &q, u_int l_opts)
{
if (l_opts & AMYSQL_DEFAULT)
l_opts = opts;
sth_t *rp = cache[q];
if (rp) return (*rp);
sth_t r = NULL;
if (l_opts & AMYSQL_PREPARED) {
#if defined(HAVE_MYSQL_BINDFUNCS) && defined(HAVE_MYSQL_BIND)
MYSQL_STMT *s = mysql_stmt_init (&mysql);
if (!s) {
err = strbuf ("MySQL ran out of memory on statment init: ")
<< mysql_error (&mysql);
return NULL;
}
if (mysql_stmt_prepare (s, q, q.len ())) {
err = strbuf ("could not prepare query (")
<< q << "): " << mysql_error (&mysql);
return NULL;
}
r = sth_prepared_t::alloc (s, q, l_opts);
#endif // HAVE_MYSQL_BINDFUNCS && HAVE_MYSQL_BIND
} else {
ptr<sth_parsed_t> r2 = sth_parsed_t::alloc (&mysql, q, l_opts);
if (!r2->parse ())
return NULL;
r = r2;
}
if (!(l_opts & AMYSQL_NOCACHE))
cache.insert (q, r);
return r;
}
示例11: strbuf
//for looking up self-certifying hostnames in certprog interface
int
path2sch (str path, str *sch)
{
*sch = NULL;
if (!path || !path.len ())
return ENOENT;
if (sfs_parsepath (path)) {
*sch = path;
return 0;
}
str lookup;
if (path[0] == '/')
lookup = path;
else
lookup = strbuf () << sfsroot << "/" << path;
str result = pathiterate (lookup, sch, 0, true);
// warn << "RESULT: " << result << "\n";
if (errno == EINVAL)
errno = 0;
// if (*sch)
// warn << "RETURNING: " << *sch << "\n";
// warn << "RETURNING ERROR CODE: " << strerror (errno) << "\n";
return errno;
}
示例12: x
void
outputter_t::output_str (str s)
{
if (_mode == OUTPUT_TREADMILL) {
static rxx x ("\n");
vec<str> v;
split (&v, x, s);
for (u_int i = 0; i < v.size (); i++) {
output_line_number ();
_output_str (v[i], "\n");
}
} else {
// we might have set up a defered output_line_number from
// within switch_to_mode; now is the time to do it.
if (s.len () && _do_output_line_number) {
output_line_number ();
_do_output_line_number = false;
}
_output_str (s, NULL);
if (_mode == OUTPUT_PASSTHROUGH)
_lineno += count_newlines (s);
}
}
示例13: memset
wide_str_t::wide_str_t (str utf8_in)
{
if (utf8_in) {
_init (utf8_in.len ());
mbstate_t state;
memset (&state, 0, sizeof (state));
const char *src = utf8_in.cstr ();
setlocale (LC_CTYPE, "en_US.UTF-8");
ssize_t ret = mbstowcs (_buf->base (), src, _buf->size ());
if (ret < 0) {
_err = true;
_buf = NULL;
_len = 0;
} else {
_len = ret;
if (0 && src) {
warn << "XX failed to completely convert string ('"
<< utf8_in << "'): "
<< "expected " << _len << " bytes, but only converted "
<< (src - utf8_in.cstr ()) << "\n";
_err = true;
} else {
_err = false;
}
}
}
}
示例14: warn
void
resolv_conf::reload_cb (ref<bool> d, bool failure, str newres)
{
if (*d)
return;
nbump = 0;
reload_lock = false;
last_reload = timenow;
if (!newres) {
warn ("resolv_conf::reload_cb: fork: %m\n");
setsock (true);
return;
}
if (newres.len () != sizeof (_res)) {
warn ("resolv_conf::reload_cb: short read\n");
setsock (true);
return;
}
char oldnsaddr[sizeof (_res.nsaddr_list)];
memcpy (oldnsaddr, _res.nsaddr_list, sizeof (oldnsaddr));
memcpy (&_res, newres, sizeof (_res));
if (memcmp (oldnsaddr, _res.nsaddr_list, sizeof (oldnsaddr))) {
warn ("reloaded DNS configuration (resolv.conf)\n");
ns_idx = _res.nscount ? _res.nscount - 1 : 0;
//nbump = 0;
last_reload = timenow;
setsock (true);
}
else
setsock (failure);
}
示例15: max
int
split (vec<str> *out, rxx pat, str expr, size_t lim, bool emptylast)
{
const char *p = expr;
const char *const e = p + expr.len ();
size_t n;
if (out)
out->clear ();
// check p < e to see that we're not dealing with an empty
// string (especially since x? matches "").
for (n = 0; p < e && n + 1 < lim; n++) {
if (!pat._exec (p, e - p, 0)) {
return 0;
}
if (!pat.success ())
break;
if (out)
out->push_back (str (p, pat.start (0)));
p += max (pat.end (0), 1);
}
if (lim && (p < e || emptylast)) {
n++;
if (out) {
out->push_back (str (p, e - p));
}
}
return n;
}