int ShellCmdArgStr::operator()(const char * & arg, CmdLine & cmd) { CmdArgStr str_arg(*this); const char * save_arg = arg; int badval = str_arg(arg, cmd); if (save_arg && !badval) set(save_arg); return badval; }
virtual String& operator() (String &str, const StringTestCaseData<StringChar>& tdata) const { const StringTestCase &tcase = tdata.tcase_; bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_ || StringIds::ConstReverseIterator == tdata.func_.iter_id_; const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size (); const std::size_t off = reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_; const std::size_t ext = tdata.ext2_; if (0 == tcase.arg) { // exercise self-referential modification (i.e., replacing // a range of elements with a subrange of its own elements) const Iterator first (this->begin (str, (Iterator*)0) + off); const Iterator last (first + ext); return str.assign (first, last); } String str_arg (tdata.arg_, tdata.arglen_); const Iterator first (this->begin (str_arg, (Iterator*)0) + off); const Iterator last (first + ext); return str.assign (first, last); }
virtual String& operator() (String &str, const StringTestCaseData<StringChar>& tdata) const { const StringTestCase &tcase = tdata.tcase_; // create a pair of iterators into the string object being modified const StringIter first1 (str.begin () + tdata.off1_); bool reverse_iter = StringIds::ReverseIterator == tdata.func_.iter_id_ || StringIds::ConstReverseIterator == tdata.func_.iter_id_; const std::size_t srclen_ = tcase.arg ? tdata.arglen_ : str.size (); const std::size_t off = reverse_iter ? srclen_ - tdata.off2_ - tdata.ext2_ : tdata.off2_; const std::size_t ext = tdata.ext2_; if (0 == tcase.arg) { // exercise self-referential modification (i.e., replacing // a range of elements with a subrange of its own elements) const Iterator first2 (this->begin (str, (Iterator*)0) + off); const Iterator last2 (first2 + ext); str.insert (first1, first2, last2); return str; } String str_arg (tdata.arg_, tdata.arglen_); const Iterator first2 (this->begin (str_arg, (Iterator*)0) + off); const Iterator last2 (first2 + ext); str.insert (first1, first2, last2); return str; }
static int handle_arg(const char *arg, FileFinder &finder) { struct stat sb; int ret = stat(arg, &sb); if (ret) { perror("stat"); return ret; } std::string str_arg(arg); switch (sb.st_mode & S_IFMT) { case S_IFDIR: ret = finder.find_files(str_arg); break; default: fprintf(stderr, "Only directories are supported\n"); ret = -1; } return ret; }