Пример #1
0
void TOpts::AddCharOptions(const TStringBuf& optstring) {
    size_t p = 0;
    if (optstring[p] == '+') {
        ArgPermutation_ = REQUIRE_ORDER;
        ++p;
    } else if (optstring[p] == '-') {
        ArgPermutation_ = RETURN_IN_ORDER;
        ++p;
    }

    while (p < optstring.size()) {
        char c = optstring[p];
        p++;
        EHasArg ha = NO_ARGUMENT;
        if (p < optstring.size() && optstring[p] == ':') {
            ha = REQUIRED_ARGUMENT;
            p++;
        }
        if (p < optstring.size() && optstring[p] == ':') {
            ha = OPTIONAL_ARGUMENT;
            p++;
        }
        AddCharOption(c, ha);
    }
}
Пример #2
0
TFile& TFile::AddAlias(const Stroka& name) {
    AddAliasImpl(name);

    const TStringBuf proto = STRINGBUF(".proto");
    const TStringBuf gztproto = STRINGBUF(".gztproto");

    // also add complementing .gztproto or .proto
    if (name.has_suffix(proto))
        AddAliasImpl(Stroka(TStringBuf(name).Chop(proto.size()), gztproto));
    else if (name.has_suffix(gztproto))
        AddAliasImpl(Stroka(TStringBuf(name).Chop(gztproto.size()), proto));

    return *this;
}
Пример #3
0
bool SkipPrefix(TStringBuf& keytext, const TStringBuf& prefix)
{
    if (keytext.has_prefix(prefix)) {
        keytext.Skip(prefix.size());
        return true;
    } else
        return false;
}
static inline void CustomSplit(const TStringBuf& str, char sep, yvector<TStringBuf>& result)
{
    result.clear();

    typedef TContainerConsumer< yvector<TStringBuf> > TConsumer;
    TConsumer consumer(&result);
    TSkipEmptyTokens<TConsumer> filter(&consumer);
    SplitString(str.data(), str.data() + str.size(), TCharDelimiter<const char>(sep), filter);
}
Пример #5
0
void DecodeUserInput(const TStringBuf& text, Wtroka& res, ECharset encoding, const Stroka& filename, size_t linenum)
{
    const size_t MAX_MSG_TEXT_LEN = 250;
    try {
        CharToWide(text, res, encoding);
    } catch (...) {
        Cerr << "Cannot decode supplied text, invalid encoding (expected " << NameByCharset(encoding) << "):\n\n";
        if (text.size() <= MAX_MSG_TEXT_LEN)
            Cerr << text;
        else
            Cerr << text.SubStr(0, MAX_MSG_TEXT_LEN) << "...";
        Cerr << "\n";
        if (!filename.empty()) {
            Cerr << "\n(File " << filename;
            if (linenum)
                Cerr << ", line " << linenum;
            Cerr << ")";
        }
        Cerr << Endl;
        throw;
    }
}