28 #undef ZYPP_BASE_LOGGER_LOGGROUP 29 #define ZYPP_BASE_LOGGER_LOGGROUP "PoolQuery" 46 bool isDependencyAttribute( sat::SolvAttr attr_r )
48 static sat::SolvAttr deps[] = {
55 SolvAttr::supplements,
68 struct EditionRangePredicate
70 EditionRangePredicate(
const Rel & op,
const Edition & edition )
74 EditionRangePredicate(
const Rel & op,
const Edition & edition,
const Arch & arch )
79 bool operator()( sat::LookupAttr::iterator iter_r )
81 if ( !
_arch.empty() && iter_r.inSolvable().arch() !=
_arch )
84 CapDetail cap( iter_r.id() );
85 if ( ! cap.isSimple() )
89 return overlaps( Edition::MatchRange( cap.op(), cap.ed() ),
_range );
92 std::string serialize()
const 94 std::string ret(
"EditionRange" );
106 struct SolvableRangePredicate
108 SolvableRangePredicate(
const Rel & op,
const Edition & edition )
113 SolvableRangePredicate(
const Rel & op,
const Edition & edition,
const Arch & arch )
118 bool operator()( sat::LookupAttr::iterator iter_r )
120 if ( !
_arch.empty() && iter_r.inSolvable().arch() !=
_arch )
122 return overlaps( Edition::MatchRange( Rel::EQ, iter_r.inSolvable().edition() ),
_range );
125 std::string serialize()
const 127 std::string ret(
"SolvableRange" );
134 Edition::MatchRange
_range;
142 struct CapabilityMatchPredicate
144 CapabilityMatchPredicate( Capability cap_r )
148 bool operator()( sat::LookupAttr::iterator iter_r )
const 150 return _cap.matches( iter_r.asType<Capability>() ) == CapMatch::yes;
153 std::string serialize()
const 155 std::string ret(
"CapabilityMatch" );
193 typedef function<bool(sat::LookupAttr::iterator)> Predicate;
195 static bool always( sat::LookupAttr::iterator ) {
return true; }
196 static bool never( sat::LookupAttr::iterator ) {
return false; }
201 AttrMatchData( sat::SolvAttr attr_r )
205 AttrMatchData( sat::SolvAttr attr_r,
const StrMatcher & strMatcher_r )
210 AttrMatchData( sat::SolvAttr attr_r,
const StrMatcher & strMatcher_r,
211 const Predicate & predicate_r,
const std::string & predicateStr_r )
223 template<
class TPredicate>
224 void addPredicate(
const TPredicate & predicate_r )
235 std::string serialize()
const 237 std::string ret(
"AttrMatchData" );
251 static AttrMatchData
deserialize(
const std::string & str_r )
253 std::vector<std::string> words;
255 if ( words.empty() || words[0] !=
"AttrMatchData" )
256 ZYPP_THROW( Exception( str::Str() <<
"Expecting AttrMatchData: " << str_r ) );
257 if ( words.size() != 5 )
258 ZYPP_THROW( Exception( str::Str() <<
"Wrong number of words: " << str_r ) );
261 ret.attr = sat::SolvAttr( words[1] );
262 ret.strMatcher = StrMatcher( words[2] );
263 if ( words[3] ==
"C" )
264 ret.strMatcher.setFlags( Match::OTHER );
265 ret.predicateStr = words[4];
270 if ( ! words.empty() )
272 if ( words[0] ==
"EditionRange" )
274 switch( words.size() )
277 ret.predicate = EditionRangePredicate( Rel(words[1]), Edition(words[2]) );
280 ret.predicate = EditionRangePredicate( Rel(words[1]), Edition(words[2]), Arch(words[3]) );
283 ZYPP_THROW( Exception( str::Str() <<
"Wrong number of words: " << str_r ) );
287 else if ( words[0] ==
"SolvableRange" )
289 switch( words.size() )
292 ret.predicate = SolvableRangePredicate( Rel(words[1]), Edition(words[2]) );
295 ret.predicate = SolvableRangePredicate( Rel(words[1]), Edition(words[2]), Arch(words[3]) );
298 ZYPP_THROW( Exception( str::Str() <<
"Wrong number of words: " << str_r ) );
302 else if ( words[0] ==
"CapabilityMatch" )
304 if ( words.size() != 2 )
305 ZYPP_THROW( Exception( str::Str() <<
"Wrong number of words: " << str_r ) );
306 ret.predicate = CapabilityMatchPredicate( Capability(words[1]) );
309 ZYPP_THROW( Exception( str::Str() <<
"Unknown predicate: " << str_r ) );
322 inline std::ostream &
operator<<( std::ostream &
str,
const AttrMatchData & obj )
324 str << obj.attr <<
": " << obj.strMatcher;
325 if ( obj.kindPredicate )
326 str <<
" +(" << obj.kindPredicate <<
")";
328 str <<
" +(" << obj.predicateStr <<
")";
333 inline bool operator==(
const AttrMatchData & lhs,
const AttrMatchData & rhs )
335 return ( lhs.attr == rhs.attr
336 && lhs.strMatcher == rhs.strMatcher
337 && lhs.predicateStr == rhs.predicateStr );
341 inline bool operator!=(
const AttrMatchData & lhs,
const AttrMatchData & rhs )
342 {
return !( lhs == rhs ); }
345 inline bool operator<(
const AttrMatchData & lhs,
const AttrMatchData & rhs )
347 if ( lhs.attr != rhs.attr )
348 return ( lhs.attr < rhs.attr );
349 if ( lhs.strMatcher != rhs.strMatcher )
350 return ( lhs.strMatcher < rhs.strMatcher );
351 if ( lhs.predicateStr != rhs.predicateStr )
352 return ( lhs.predicateStr < rhs.predicateStr );
356 typedef std::list<AttrMatchData> AttrMatchList;
374 , _require_all(false)
427 && _attrs.size() == 1
428 && _attrs.begin()->first == sat::SolvAttr::name ) )
439 && _kinds == rhs.
_kinds );
452 void compile()
const;
462 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
465 {
return new Impl( *
this ); }
492 void PoolQuery::Impl::compile()
const 494 _attrMatchList.clear();
496 Match cflags( _flags );
497 if ( cflags.
mode() == Match::OTHER )
522 else if (_attrs.size() == 1)
527 rcstrings = createRegex(joined, cflags);
528 if (joined.size() > 1)
530 _attrMatchList.push_back( AttrMatchData( _attrs.begin()->first,
538 bool attrvals_empty =
true;
539 for (AttrRawStrMap::const_iterator ai = _attrs.begin(); ai != _attrs.end(); ++ai)
540 if (!ai->second.empty())
541 for(StrContainer::const_iterator it = ai->second.begin();
542 it != ai->second.end(); it++)
545 attrvals_empty =
false;
546 goto attremptycheckend;
551 bool attrvals_thesame =
true;
552 AttrRawStrMap::const_iterator ai = _attrs.begin();
555 for (; ai != _attrs.end(); ++ai)
559 set1.begin(), set1.end(),
560 ai->second.begin(), ai->second.end(),
561 inserter(result, result.begin()));
564 attrvals_thesame =
false;
573 if (attrvals_empty || attrvals_thesame)
579 rcstrings = createRegex(joined, cflags);
585 rcstrings = createRegex(joined, cflags);
587 if (joined.size() > 1)
591 for_( ai, _attrs.begin(), _attrs.end() )
593 _attrMatchList.push_back( AttrMatchData( ai->first, matcher ) );
603 for_(ai, _attrs.begin(), _attrs.end())
608 string s = createRegex(joined, cflags);
609 if (joined.size() > 1)
611 _attrMatchList.push_back( AttrMatchData( ai->first,
618 if ( ! _uncompiledPredicated.empty() )
622 for_( it, _uncompiledPredicated.begin(), _uncompiledPredicated.end() )
624 if ( it->strMatcher.flags().mode() == Match::OTHER )
628 const std::string & mstr( it->strMatcher.searchstring() );
629 if ( ! mstr.empty() )
630 joined.insert( mstr );
633 rcstrings = createRegex( joined, cflags );
634 if ( joined.size() > 1 )
638 AttrMatchData nattr( *it );
639 nattr.strMatcher =
StrMatcher( rcstrings, cflags ),
640 _attrMatchList.push_back( std::move(nattr) );
645 _attrMatchList.push_back( *it );
651 if ( _attrMatchList.empty() )
654 rcstrings = createRegex( _strings, cflags );
655 if ( _strings.size() > 1 )
657 _attrMatchList.push_back( AttrMatchData( sat::SolvAttr::allAttr,
662 for_( it, _attrMatchList.begin(), _attrMatchList.end() )
664 it->strMatcher.compile();
675 string regexed = str;
682 for (pos = 0; (pos = regexed.find(
"*", pos)) != std::string::npos; pos+=2)
683 regexed = regexed.replace(pos, 1, r_all);
686 for (pos = 0; (pos = regexed.find(
'?', pos)) != std::string::npos; ++pos)
687 regexed = regexed.replace(pos, 1, r_one);
692 string PoolQuery::Impl::createRegex(
const StrContainer & container,
const Match & flags )
const 695 #define WB (_match_word ? string("\\b") : string()) 698 if (container.empty())
701 if (container.size() == 1)
703 return WB + *container.begin() +
WB;
709 StrContainer::const_iterator it = container.begin();
720 tmp +=
".*" +
WB + tmp;
721 rstr =
"(?=" + tmp +
")";
727 rstr +=
WB +
"(" + tmp;
732 for (; it != container.end(); ++it)
742 tmp +=
".*" +
WB + tmp;
743 rstr +=
"(?=" + tmp +
")";
772 if ( _kinds.empty() )
776 for(Kinds::const_iterator it = _kinds.begin();
777 it != _kinds.end(); ++it)
783 if ( _repos.empty() )
787 for(StrContainer::const_iterator it = _repos.begin();
788 it != _repos.end(); ++it)
793 o <<
"version: "<< _op <<
" " << _edition.asString() << endl;
794 o <<
"status: " << ( _status_flags ? ( _status_flags == INSTALLED_ONLY ?
"INSTALLED_ONLY" :
"UNINSTALLED_ONLY" )
797 o <<
"string match flags: " <<
Match(_flags) << endl;
801 for(StrContainer::const_iterator it = _strings.begin();
802 it != _strings.end(); ++it)
806 o <<
"attributes: " << endl;
807 for(AttrRawStrMap::const_iterator ai = _attrs.begin(); ai != _attrs.end(); ++ai)
809 o <<
"* " << ai->first <<
": ";
810 for(StrContainer::const_iterator vi = ai->second.begin();
811 vi != ai->second.end(); ++vi)
816 o <<
"predicated: " << endl;
817 for_( it, _uncompiledPredicated.begin(), _uncompiledPredicated.end() )
819 o <<
"* " << *it << endl;
823 o <<
"last attribute matcher compiled: " << endl;
824 if ( _attrMatchList.empty() )
826 o <<
"not yet compiled" << endl;
830 for_( it, _attrMatchList.begin(), _attrMatchList.end() )
832 o <<
"* " << *it << endl;
846 PoolQuery::PoolQuery()
855 if (repoalias.empty())
857 WAR <<
"ignoring an empty repository alias" << endl;
884 if ( arch.
empty() && !explicitKind )
900 AttrMatchData attrMatchData( attr );
907 attrMatchData.kindPredicate = explicitKind;
910 if ( isDependencyAttribute( attr ) )
911 attrMatchData.addPredicate( EditionRangePredicate( op, edition, arch ) );
913 attrMatchData.addPredicate( SolvableRangePredicate( op, edition, arch ) );
927 if ( isDependencyAttribute( attr ) )
928 attrMatchData.addPredicate( CapabilityMatchPredicate( cap_r ) );
930 attrMatchData.addPredicate( SolvableRangePredicate( cap.
op(), cap.
ed() ) );
981 AttrRawStrMap::const_iterator it =
_pimpl->
_attrs.find(attr);
982 return it !=
_pimpl->
_attrs.end() ? it->second : nocontainer;
1137 bool finded_something =
false;
1145 if ((!s.empty()) && s[0]==
'#')
1151 if (s.empty() || pos == s.npos)
1153 if (finded_something)
1163 finded_something =
true;
1165 string attrName(
str::trim(
string(s,0,pos)));
1166 string attrValue(
str::trim(
string(s,pos+1,s.npos)));
1180 || attribute==
"global_string")
1185 || attribute==
"string_type" )
1208 else if ( s == StringTypeAttr::noAttr )
1210 WAR <<
"unknown string type " << attrValue << endl;
1214 WAR <<
"forget recover some attribute defined as String type attribute: " << attrValue << endl;
1229 WAR <<
"unknown boolean value " << attrValue << endl;
1244 WAR <<
"unknown boolean value " << attrValue << endl;
1249 if( attrValue ==
"all" )
1253 else if( attrValue ==
"installed" )
1257 else if( attrValue ==
"not-installed" )
1263 WAR <<
"Unknown value for install status " << attrValue << endl;
1270 if (attrValue.find_first_of(
"=<>!") == 0)
1272 pos = attrValue.find_last_of(
"=<>");
1273 rel =
Rel(attrValue.substr(0, pos+1));
1274 attrValue =
str::trim(attrValue.substr(pos+1, attrValue.npos));
1291 else if ( attribute==PoolQueryAttr::noAttr )
1293 WAR <<
"empty attribute name" << endl;
1297 string s = attrName;
1300 if ( a == SolvAttr::name || isDependencyAttribute( a ) )
1315 return finded_something;
1327 str <<
"repo: " << *it << delim ;
1333 << it->idStr() << delim ;
1348 <<
": substring" << delim;
1363 str <<
"case_sensitive: ";
1366 str <<
"on" << delim;
1370 str <<
"off" << delim;
1376 str <<
"require_all: ";
1379 str <<
"on" << delim;
1383 str <<
"off" << delim;
1392 str <<
"install_status: all" << delim;
1395 str <<
"install_status: installed" << delim;
1398 str <<
"install_status: not-installed" << delim;
1410 string s = it->first.asString();
1412 for_( it2,it->second.begin(),it->second.end() )
1414 str << s <<
": "<< *it2 << delim;
1418 for_( it,
_pimpl->_uncompiledPredicated.begin(),
_pimpl->_uncompiledPredicated.end() )
1420 str <<
"complex: "<< it->serialize() << delim;
1428 {
return _pimpl->asString(); }
1469 const base_iterator &
end()
const 1471 static base_iterator _end;
1477 if ( base_r ==
end() )
1478 base_r = startNewQyery();
1485 while ( base_r !=
end() )
1487 if ( isAMatch( base_r ) )
1498 void matchDetail(
const base_iterator & base_r, std::vector<base_iterator> & return_r )
const 1500 if ( base_r ==
end() )
1505 if ( _attrMatchList.size() == 1 )
1510 base_iterator base( base_r );
1512 return_r.push_back( base );
1514 const AttrMatchData::Predicate &
predicate( _attrMatchList.front().predicate );
1515 for ( ++base; base.
inSolvable() == inSolvable; ++base )
1518 return_r.push_back( base );
1524 for_( mi, _attrMatchList.begin(), _attrMatchList.end() )
1526 const AttrMatchData & matchData( *mi );
1528 if ( matchData.strMatcher )
1534 const AttrMatchData::Predicate &
predicate( matchData.predicate );
1538 return_r.push_back( it );
1556 for_( it, query_r->_repos.begin(), query_r->_repos.end() )
1562 _neverMatchRepo =
true;
1566 if ( _neverMatchRepo && ! _repos.empty() )
1567 _neverMatchRepo =
false;
1570 _kinds = query_r->_kinds;
1573 _edition = query_r->_edition;
1575 _status_flags = query_r->_status_flags;
1577 _attrMatchList = query_r->_attrMatchList;
1589 if ( _neverMatchRepo )
1593 if ( _repos.size() == 1 )
1598 if ( _attrMatchList.size() == 1 )
1600 const AttrMatchData & matchData( _attrMatchList.front() );
1602 if ( matchData.strMatcher )
1637 if ( _repos.size() > 1 && _repos.find( inRepo ) == _repos.end() )
1654 bool globalKindOk =( _kinds.empty() || inSolvable.isKind( _kinds.begin(), _kinds.end() ) );
1659 if ( _attrMatchList.size() == 1 )
1663 const AttrMatchData & matchData( _attrMatchList.front() );
1665 if ( matchData.kindPredicate )
1667 if ( matchData.kindPredicate != inSolvable.kind() )
1673 else if ( !globalKindOk )
1676 if ( !matchData.predicate || matchData.predicate( base_r ) )
1683 for_( mi, _attrMatchList.begin(), _attrMatchList.end() )
1685 const AttrMatchData & matchData( *mi );
1687 if ( matchData.kindPredicate )
1689 if ( matchData.kindPredicate != inSolvable.kind() )
1692 else if ( !globalKindOk )
1696 if ( matchData.strMatcher )
1702 const AttrMatchData::Predicate &
predicate( matchData.predicate );
1735 void PoolQueryIterator::increment()
1744 if ( ! _matcher->advance( base_reference() ) )
1760 _matches.reset(
new Matches );
1761 _matcher->matchDetail( base_reference(), *_matches );
1768 if ( ! obj.matchesEmpty() )
1770 for_( it, obj.matchesBegin(), obj.matchesEnd() )
1772 str << endl <<
" " << it->inSolvAttr() <<
"\t" << it->asString();
const Rel editionRel() const
unsigned splitEscaped(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t", bool withEmpty=false)
Split line_r into words with respect to escape delimeters.
int _status_flags
Installed status filter flags.
static const PoolQueryAttr installStatusAttr
Rel _op
Operator for edition condition.
void appendEscaped(std::string &str_r, const C_Str &next_r, const char sep_r= ' ')
Escape next_r and append it to str_r using separator sep_r.
A Solvable object within the sat Pool.
void setUninstalledOnly()
Return only packages from repos other than .
StatusFilter
Installed status filter setters.
static const StringTypeAttr substringAttr
bool compareByRel(Rel op, const Tp &lhs, const Tp &rhs, TCompare compare)
Comparison of two elements using relational operator op.
bool advance(base_iterator &base_r) const
void addAttribute(const sat::SolvAttr &attr, const std::string &value="")
Filter by the value of the specified attr attribute.
void setAttr(SolvAttr attr_r)
Set the SolvAttr to search.
std::set< ResKind > Kinds
std::string asString(const DefaultIntegral< Tp, TInitial > &obj)
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
String matching option flags as used e.g.
static const SolvAttr allAttr
Value to request searching all Attributes (0).
std::set< ResKind > _kinds
Resolvable kinds to include.
Helper providing more detailed information about a Capability.
PoolQuery::StrContainer & _cont
bool operator==(const PoolQuery::Impl &rhs) const
const StrContainer & strings() const
Search strings added via addString()
static const StringTypeAttr noAttr
const StrContainer & attribute(const sat::SolvAttr &attr) const
static ResKind explicitBuiltin(const char *str_r)
Return the builtin kind if str_r explicitly prefixed.
PoolQuery iterator as returned by PoolQuery::begin.
void setFlags(const Match &flags)
Free function to set libsolv repo search flags.
String matching (STRING|SUBSTRING|GLOB|REGEX).
static const PoolQueryAttr caseSensitiveAttr
void execute(ProcessResolvable fnc)
Executes the query with the current settings.
void addString(const std::string &value)
Add a global query string.
bool filesMatchFullPath() const
Whether searching in filelists looks at the full path or just at the basenames.
bool operator==(const PoolQuery &b) const
Lightweight attribute value lookup.
std::ostream & operator<<(std::ostream &str, const PoolQuery &obj)
const Edition edition() const
bool operator()(const string &str)
void setMatchGlob()
Set to match globs.
void setMatchRegex()
Set to use the query strings as regexes.
const Arch Arch_empty(IdString::Empty)
bool recover(std::istream &str, char delim= '\n')
Reads from stream query.
String related utilities and Regular expression matching.
bool operator!=(const PoolQuery::Impl &rhs) const
PoolQueryMatcher(const shared_ptr< const PoolQuery::Impl > &query_r)
Ctor stores the PoolQuery settings.
void addDependency(const sat::SolvAttr &attr, const std::string &name, const Rel &op, const Edition &edition)
Query "name|global op edition".
void setModeGlob()
Set the mode GLOB.
Access to the sat-pools string space.
void setCaseSensitive(bool value=true)
Turn case sentitivity on or off (unsets or sets SEARCH_NOCASE flag).
Match _flags
Sat solver search flags.
void addKind(const ResKind &kind)
Filter by selectable kind.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Edition represents [epoch:]version[-release]
Store PoolQuery settings and assist PoolQueryIterator.
Edition _edition
Edition condition operand.
bool caseSensitive() const
returns true if search is case sensitive
bool operator==(const SetRelation::Enum &lhs, const SetCompare &rhs)
void setModeSubstring()
Set the mode SUBSTRING.
bool empty() const
Test for an empty Arch (this is Arch_epmty, not Arch_noarch ).
Base class for creating IdString based types.
PoolQueryAttr(const std::string &str_r)
const StrContainer & repos() const
std::string asString() const
Conversion to std::string
constPtrType getPtr() const
std::string & replaceAll(std::string &str_r, const std::string &from_r, const std::string &to_r)
Replace all occurrences of from_r with to_r in str_r (inplace).
static const PoolQueryAttr noAttr
bool requireAll() const
Whether all values added via addString() or addAttribute() are required to match the values of the re...
bool overlaps(Rel lhs, Rel rhs, int cmp)
Compute Range overlaps.
static const PoolQueryAttr repoAttr
std::vector< sat::LookupAttr::iterator > Matches
AttrMatchList _attrMatchList
StrMatcher per attribtue.
void turn(const Match &rhs, bool onoff)
Depending on the value of onoff, set or unset flags.
Edition::MatchRange _range
Match::Mode matchMode() const
Returns string matching mode as enum.
std::string getline(std::istream &str)
Read one line from stream.
StringTypeAttr(const char *cstr_r)
static Pool instance()
Singleton ctor.
std::ostream & dumpRange(std::ostream &str, TIterator begin, TIterator end, const std::string &intro="{", const std::string &pfx="\n ", const std::string &sep="\n ", const std::string &sfx="\n", const std::string &extro="}")
Print range defined by iterators (multiline style).
std::set< std::string > StrContainer
iterator end() const
Iterator behind the end of query results.
bool isModeGlob() const
Whether this has mode GLOB.
void setRepo(Repository repo_r, Location=SOLV_ATTR)
Set search in one Repository.
void setStatusFilterFlags(StatusFilter flags)
Set status filter directly.
void matchDetail(const base_iterator &base_r, std::vector< base_iterator > &return_r) const
Provide all matching attributes within this solvable.
std::string trim(const std::string &s, const Trim trim_r)
std::string asString() const
void addRepo(const std::string &repoalias)
Filter by repo.
static string wildcards2regex(const string &str)
Converts '*' and '?' wildcards within str into their regex equivalents.
const AttrRawStrMap & attributes() const
Map (map<SolvAttr, StrContainer>) of attribute values added via addAttribute(), addDep in string form...
void setModeRegex()
Set the mode REGEX.
Solvable inSolvable() const
The current Solvable.
void setMatchWord()
Set to match words (uses regex)
void stayInThisSolvable()
Stop after all matches in the current Solvable are processed.
std::ostream & dumpOn(std::ostream &str, const PoolQuery &obj)
Repository reposFind(const std::string &alias_r) const
Find a Repository named alias_r.
bool isAMatch(base_iterator &base_r) const
Check whether we are on a match.
void setStrMatcher(const StrMatcher &matcher_r)
Set the pattern to match.
MyInserter(PoolQuery::StrContainer &cont)
Match flags() const
Free function to get libsolv repo search flags.
sat::LookupAttr::iterator base_iterator
void nextSkipSolvable()
On the next call to operator++ advance to the next Solvable.
static const SolvAttr name
StringTypeAttr(const std::string &str_r)
bool strToFalse(const C_Str &str)
Return false if str is 0, false, no, off.
Kinds _kinds
Kinds to search.
void setInstalledOnly()
Return only repo packages.
static const StringTypeAttr exactAttr
base_iterator startNewQyery() const
Initialize a new base query.
static const PoolQueryAttr stringTypeAttr
static const StringTypeAttr wordAttr
std::ostream & operator<<(std::ostream &str, const zypp::shared_ptr< void > &obj)
bool empty() const
Whether the query is empty.
Repository inRepo() const
The current Repository.
bool operator!=(const SetRelation::Enum &lhs, const SetCompare &rhs)
void setMatchSubstring()
Set to substring (the default).
represents all atributes in PoolQuery except SolvAtributes, which are used as is (not needed extend a...
#define arrayBegin(A)
Simple C-array iterator.
bool strToTrue(const C_Str &str)
Parsing boolean from string.
std::set< Repository > _repos
Repositories include in the search.
bool isModeSubstring() const
Whether this has mode SUBSTRING.
static const PoolQueryAttr stringAttr
bool deserialize(const std::string &str_r, DownloadMode &result_r)
std::map< sat::SolvAttr, StrContainer > AttrRawStrMap
bool matchSubstring() const
std::set< AttrMatchData > _uncompiledPredicated
Uncompiled attributes with predicate.
StatusFilter statusFilterFlags() const
void setModeString()
Set the mode STRING.
static const Match NOCASE
If set, match case insensitive.
Base class for Exception.
bool isModeRegex() const
Whether this has mode REGEX.
const Kinds & kinds() const
bool empty() const
Whether the result is empty.
static const PoolQueryAttr complexAttr
void setEdition(const Edition &edition, const Rel &op=Rel::EQ)
Set version condition.
void setMatchExact()
Set to match exact string instead of substring.
void nextSkipRepo()
On the next call to operator++ advance to the next Repository.
StrContainer _repos
Repos to search.
bool operator()(const string &str)
Mode mode() const
Return the mode part.
std::string asUserHistory() const
A single (multiline) string composed of asUserString and historyAsString.
size_type size() const
Number of solvables in the query result.
DefaultIntegral< bool, false > _neverMatchRepo
static const PoolQueryAttr requireAllAttr
void serialize(std::ostream &str, char delim= '\n') const
Writes a machine-readable string representation of the query to stream.
static const PoolQueryAttr editionAttr
for_use_in_switch inSwitch() const
Enumarator provided for use in switch statement.
void setFilesMatchFullPath(bool value=true)
If set (default), look at the full path when searching in filelists.
RW_pointer< Impl > _pimpl
Pointer to implementation.
AttrMatchList _attrMatchList
StrMatcher per attribtue.
const_iterator begin() const
Query result accessers.
StatusFilter _status_flags
Sat solver status flags.
PoolQueryAttr(const char *cstr_r)
Impl * clone() const
clone for RWCOW_pointer
int invokeOnEach(TIterator begin_r, TIterator end_r, TFilter filter_r, TFunction fnc_r)
Iterate through [begin_r,end_r) and invoke fnc_r on each item that passes filter_r.
const_iterator end() const
An iterator pointing to the end of the query result.
bool operator<(const StrMatcher &lhs, const StrMatcher &rhs)
std::string asString() const
Return a human-readable description of the query.
Easy-to use interface to the ZYPP dependency resolver.
static const PoolQueryAttr kindAttr
function< bool(const sat::Solvable &)> ProcessResolvable
static const Match FILES
LookupAttr: match full path when matching in filelists, otherwise just the basenames.
StrContainer _strings
Raw search strings.
static const StringTypeAttr globAttr
AttrRawStrMap _attrs
Raw attributes.
static const Edition noedition
Value representing noedition ("") This is in fact a valid Edition.
const base_iterator & end() const
iterator begin() const
Iterator to the begin of query results.
static const StringTypeAttr regexAttr
bool isModeString() const
Whether this has mode STRING.
void setRequireAll(bool require_all=true)
Require that all of the values set by addString or addAttribute match the values of respective attrib...
bool test(const Match &rhs) const
Test whether all of the rhs bits are set (same mode if rhs has one).