本文整理汇总了C++中StringData::size方法的典型用法代码示例。如果您正苦于以下问题:C++ StringData::size方法的具体用法?C++ StringData::size怎么用?C++ StringData::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StringData
的用法示例。
在下文中一共展示了StringData::size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: attempted
std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& event,
std::ostream& os) {
static const size_t maxLogLine = 10 * 1024;
_dateFormatter(os, event.getDate());
os << ' ';
os << event.getSeverity().toChar();
os << ' ';
LogComponent component = event.getComponent();
os << component;
os << ' ';
StringData contextName = event.getContextName();
if (!contextName.empty()) {
os << '[' << contextName << "] ";
}
StringData msg = event.getMessage();
if (msg.size() > maxLogLine) {
os << "warning: log line attempted (" << msg.size() / 1024 << "k) over max size ("
<< maxLogLine / 1024 << "k), printing beginning and end ... ";
os << msg.substr(0, maxLogLine / 3);
os << " .......... ";
os << msg.substr(msg.size() - (maxLogLine / 3));
} else {
os << msg;
}
if (!msg.endsWith(StringData("\n", StringData::LiteralTag())))
os << '\n';
return os;
}
示例2: init
Status WhereMatchExpression::init( const StringData& ns,
const StringData& theCode,
const BSONObj& scope ) {
if ( ns.size() == 0 )
return Status( ErrorCodes::BadValue, "ns for $where cannot be empty" );
if ( theCode.size() == 0 )
return Status( ErrorCodes::BadValue, "code for $where cannot be empty" );
_ns = ns.toString();
_code = theCode.toString();
_userScope = scope.getOwned();
NamespaceString nswrapper( _ns );
const string userToken = ClientBasic::getCurrent()->getAuthorizationSession()
->getAuthenticatedUserNamesToken();
_scope = globalScriptEngine->getPooledScope( nswrapper.db().toString(),
"where" + userToken );
_func = _scope->createFunction( _code.c_str() );
if ( !_func )
return Status( ErrorCodes::BadValue, "$where compile error" );
return Status::OK();
}
示例3: validateDBName
Status Database::validateDBName( const StringData& dbname ) {
if ( dbname.size() <= 0 )
return Status( ErrorCodes::BadValue, "db name is empty" );
if ( dbname.size() >= 64 )
return Status( ErrorCodes::BadValue, "db name is too long" );
if ( dbname.find( '.' ) != string::npos )
return Status( ErrorCodes::BadValue, "db name cannot contain a ." );
if ( dbname.find( ' ' ) != string::npos )
return Status( ErrorCodes::BadValue, "db name cannot contain a space" );
#ifdef _WIN32
static const char* windowsReservedNames[] = {
"con", "prn", "aux", "nul",
"com1", "com2", "com3", "com4", "com5", "com6", "com7", "com8", "com9",
"lpt1", "lpt2", "lpt3", "lpt4", "lpt5", "lpt6", "lpt7", "lpt8", "lpt9"
};
string lower( dbname.toString() );
std::transform( lower.begin(), lower.end(), lower.begin(), ::tolower );
for ( size_t i = 0; i < (sizeof(windowsReservedNames) / sizeof(char*)); ++i ) {
if ( lower == windowsReservedNames[i] ) {
stringstream errorString;
errorString << "db name \"" << dbname.toString() << "\" is a reserved name";
return Status( ErrorCodes::BadValue, errorString.str() );
}
}
#endif
return Status::OK();
}
示例4: logLockless
void Logstream::logLockless( const StringData& s ) {
if ( s.size() == 0 )
return;
if ( doneSetup == 1717 ) {
#if defined(_WIN32)
int fd = fileno( logfile );
if ( _isatty( fd ) ) {
fflush( logfile );
writeUtf8ToWindowsConsole( s.rawData(), s.size() );
return;
}
#else
if ( isSyslog ) {
syslog( LOG_INFO , "%s" , s.rawData() );
return;
}
#endif
if (fwrite(s.rawData(), s.size(), 1, logfile)) {
fflush(logfile);
}
else {
int x = errno;
cout << "Failed to write to logfile: " << errnoWithDescription(x) << endl;
}
}
else {
cout << s;
cout.flush();
}
}
示例5: parse
void FieldRef::parse(const StringData& dottedField) {
if (dottedField.size() == 0) {
return;
}
if (_size != 0) {
clear();
}
// We guarantee that accesses through getPart() will be valid while 'this' is. So we
// take a copy. We're going to be "chopping" up the copy into c-strings.
_fieldBase.reset(new char[dottedField.size()+1]);
dottedField.copyTo( _fieldBase.get(), true );
// Separate the field parts using '.' as a delimiter.
char* beg = _fieldBase.get();
char* cur = beg;
char* end = beg + dottedField.size();
while (true) {
if (cur != end && *cur != '.') {
cur++;
continue;
}
appendPart(StringData(beg, cur - beg));
if (cur != end) {
*cur = '\0';
beg = ++cur;
continue;
}
break;
}
}
示例6: get
void BasicArray<T>::to_dot(std::ostream& out, StringData title) const
{
ref_type ref = get_ref();
if (title.size() != 0) {
out << "subgraph cluster_" << ref << " {\n";
out << " label = \"" << title << "\";\n";
out << " color = white;\n";
}
out << "n" << std::hex << ref << std::dec << "[shape=none,label=<";
out << "<TABLE BORDER=\"0\" CELLBORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"4\"><TR>\n";
// Header
out << "<TD BGCOLOR=\"lightgrey\"><FONT POINT-SIZE=\"7\"> ";
out << "0x" << std::hex << ref << std::dec << "<BR/>";
out << "</FONT></TD>\n";
// Values
std::size_t n = m_size;
for (std::size_t i = 0; i != n; ++i)
out << "<TD>" << get(i) << "</TD>\n";
out << "</TR></TABLE>>];\n";
if (title.size() != 0)
out << "}\n";
to_dot_parent_edge(out);
}
示例7: init
Status WhereMatchExpression::init(StringData dbName, StringData theCode, const BSONObj& scope) {
if (dbName.size() == 0) {
return Status(ErrorCodes::BadValue, "ns for $where cannot be empty");
}
if (theCode.size() == 0) {
return Status(ErrorCodes::BadValue, "code for $where cannot be empty");
}
_dbName = dbName.toString();
_code = theCode.toString();
_userScope = scope.getOwned();
const string userToken =
AuthorizationSession::get(ClientBasic::getCurrent())->getAuthenticatedUserNamesToken();
try {
_scope = globalScriptEngine->getPooledScope(_txn, _dbName, "where" + userToken);
_func = _scope->createFunction(_code.c_str());
} catch (...) {
return exceptionToStatus();
}
if (!_func)
return Status(ErrorCodes::BadValue, "$where compile error");
return Status::OK();
}
示例8: set_primary_key_for_object
void ObjectStore::set_primary_key_for_object(Group& group, StringData object_type, StringData primary_key) {
TableRef table = group.get_table(c_primaryKeyTableName);
size_t row = table->find_first_string(c_primaryKeyObjectClassColumnIndex, object_type);
#if REALM_ENABLE_SYNC
// sync::create_table* functions should have already updated the pk table.
if (sync::has_object_ids(group)) {
if (primary_key.size() == 0)
REALM_ASSERT(row == not_found);
else {
REALM_ASSERT(row != not_found);
REALM_ASSERT(table->get_string(c_primaryKeyPropertyNameColumnIndex, row) == primary_key);
}
return;
}
#endif // REALM_ENABLE_SYNC
if (row == not_found && primary_key.size()) {
row = table->add_empty_row();
table->set_string_unique(c_primaryKeyObjectClassColumnIndex, row, object_type);
table->set_string(c_primaryKeyPropertyNameColumnIndex, row, primary_key);
return;
}
// set if changing, or remove if setting to nil
if (primary_key.size() == 0) {
if (row != not_found) {
table->move_last_over(row);
}
}
else {
table->set_string(c_primaryKeyPropertyNameColumnIndex, row, primary_key);
}
}
示例9: isPathPrefixOf
bool isPathPrefixOf(StringData first, StringData second) {
if (first.size() >= second.size()) {
return false;
}
return second.startsWith(first) && second[first.size()] == '.';
}
示例10: parseNumberFromStringWithBase
Status parseNumberFromStringWithBase(
const StringData& stringValue, int base, NumberType* result) {
typedef ::std::numeric_limits<NumberType> limits;
if (base == 1 || base < 0 || base > 36)
return Status(ErrorCodes::BadValue, "Invalid base", 0);
bool isNegative = false;
StringData str = _extractBase(_extractSign(stringValue, &isNegative), base, &base);
if (str.empty())
return Status(ErrorCodes::FailedToParse, "No digits");
NumberType n(0);
if (isNegative) {
if (limits::is_signed) {
for (size_t i = 0; i < str.size(); ++i) {
NumberType digitValue = NumberType(_digitValue(str[i]));
if (int(digitValue) >= base)
return Status(ErrorCodes::FailedToParse, "Bad digit");
// MSVC: warning C4146: unary minus operator applied to unsigned type, result still unsigned
// This code is statically known to be dead when NumberType is unsigned, so the warning is not real
#pragma warning(push)
#pragma warning(disable:4146)
if ((NumberType(limits::min() / base) > n) ||
((limits::min() - NumberType(n * base)) > -digitValue)) {
#pragma warning(pop)
return Status(ErrorCodes::FailedToParse, "Underflow");
}
n *= NumberType(base);
n -= NumberType(digitValue);
}
}
else {
return Status(ErrorCodes::FailedToParse, "Negative value");
}
}
else {
for (size_t i = 0; i < str.size(); ++i) {
NumberType digitValue = NumberType(_digitValue(str[i]));
if (int(digitValue) >= base)
return Status(ErrorCodes::FailedToParse, "Bad digit");
if ((NumberType(limits::max() / base) < n) ||
(NumberType(limits::max() - n * base) < digitValue)) {
return Status(ErrorCodes::FailedToParse, "Overflow");
}
n *= NumberType(base);
n += NumberType(digitValue);
}
}
*result = n;
return Status::OK();
}
示例11: getCanonicalIndexField
bool getCanonicalIndexField( StringData fullName, string* out ) {
// check if fieldName contains ".$" or ".###" substrings (#=digit) and skip them
// however do not skip the first field even if it meets these criteria
if ( fullName.find( '.' ) == string::npos )
return false;
bool modified = false;
StringBuilder buf;
for ( size_t i=0; i<fullName.size(); i++ ) {
char c = fullName[i];
if ( c != '.' ) {
buf << c;
continue;
}
if ( i + 1 == fullName.size() ) {
// ends with '.'
buf << c;
continue;
}
// check for ".$", skip if present
if ( fullName[i+1] == '$' ) {
// only do this if its not something like $a
if ( i + 2 >= fullName.size() || fullName[i+2] == '.' ) {
i++;
modified = true;
continue;
}
}
// check for ".###" for any number of digits (no letters)
if ( isdigit( fullName[i+1] ) ) {
size_t j = i;
// skip digits
while ( j+1 < fullName.size() && isdigit( fullName[j+1] ) )
j++;
if ( j+1 == fullName.size() || fullName[j+1] == '.' ) {
// only digits found, skip forward
i = j;
modified = true;
continue;
}
}
buf << c;
}
if ( !modified )
return false;
*out = buf.str();
return true;
}
示例12: getMaxLogSizeKB
std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& event,
std::ostream& os) {
const auto maxLogSizeKB = getMaxLogSizeKB();
const size_t maxLogSize = maxLogSizeKB * 1024;
getDateFormatter()(os, event.getDate());
os << ' ';
const auto severity = event.getSeverity();
os << severity.toStringDataCompact();
os << ' ';
LogComponent component = event.getComponent();
os << component;
os << ' ';
StringData contextName = event.getContextName();
if (!contextName.empty()) {
os << '[' << contextName << "] ";
}
StringData msg = event.getMessage();
#ifdef _WIN32
// We need to translate embedded Unix style line endings into Windows style endings.
std::string tempstr;
size_t embeddedNewLine = msg.find('\n');
if (embeddedNewLine != std::string::npos) {
tempstr = msg.toString().replace(embeddedNewLine, 1, "\r\n");
embeddedNewLine = tempstr.find('\n', embeddedNewLine + 2);
while (embeddedNewLine != std::string::npos) {
tempstr = tempstr.replace(embeddedNewLine, 1, "\r\n");
embeddedNewLine = tempstr.find('\n', embeddedNewLine + 2);
}
msg = tempstr;
}
#endif
if (event.isTruncatable() && msg.size() > maxLogSize) {
os << "warning: log line attempted (" << msg.size() / 1024 << "kB) over max size ("
<< maxLogSizeKB << "kB), printing beginning and end ... ";
os << msg.substr(0, maxLogSize / 3);
os << " .......... ";
os << msg.substr(msg.size() - (maxLogSize / 3));
} else {
os << msg;
}
if (!msg.endsWith(kEOL))
os << kEOL;
return os;
}
示例13: operator
bool operator()(StringData v1, const char* v1_upper, const char* v1_lower, StringData v2, bool = false, bool = false) const
{
if (v2.is_null() && !v1.is_null())
return false;
if (v1.size() == 0 && !v2.is_null())
return true;
return search_case_fold(v2, v1_upper, v1_lower, v1.size()) != v2.size();
}
示例14: userAllowedWriteNS
Status userAllowedWriteNS( const StringData& db, const StringData& coll ) {
// validity checking
if ( db.size() == 0 )
return Status( ErrorCodes::BadValue, "db cannot be blank" );
if ( !NamespaceString::validDBName( db ) )
return Status( ErrorCodes::BadValue, "invalid db name" );
if ( coll.size() == 0 )
return Status( ErrorCodes::BadValue, "collection cannot be blank" );
if ( !NamespaceString::validCollectionName( coll ) )
return Status( ErrorCodes::BadValue, "invalid collection name" );
if ( db.size() + 1 /* dot */ + coll.size() > Namespace::MaxNsColletionLen )
return Status( ErrorCodes::BadValue,
str::stream()
<< "fully qualified namespace " << db << '.' << coll << " is too long "
<< "(max is " << Namespace::MaxNsColletionLen << " bytes)" );
// check spceial areas
if ( db == "system" )
return Status( ErrorCodes::BadValue, "cannot use 'system' database" );
if ( coll.startsWith( "system." ) ) {
if ( coll == "system.indexes" ) return Status::OK();
if ( coll == "system.js" ) return Status::OK();
if ( coll == "system.profile" ) return Status::OK();
if ( coll == "system.users" ) return Status::OK();
if ( db == "admin" ) {
if ( coll == "system.version" ) return Status::OK();
if ( coll == "system.roles" ) return Status::OK();
if ( coll == "system.new_users" ) return Status::OK();
if ( coll == "system.backup_users" ) return Status::OK();
}
if ( db == "local" ) {
if ( coll == "system.replset" ) return Status::OK();
}
return Status( ErrorCodes::BadValue,
str::stream() << "cannot write to '" << db << "." << coll << "'" );
}
// some special rules
if ( coll.find( ".system." ) != string::npos ) {
// this matches old (2.4 and older) behavior, but I'm not sure its a good idea
return Status( ErrorCodes::BadValue,
str::stream() << "cannot write to '" << db << "." << coll << "'" );
}
return Status::OK();
}
示例15: _startsWith
bool UpdateIndexData::_startsWith(StringData a, StringData b) const {
if (!a.startsWith(b))
return false;
// make sure there is a dot or EOL right after
if (a.size() == b.size())
return true;
return a[b.size()] == '.';
}