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;
416 #define OUTS(A) if ( A != rhs.A ) return A < rhs.A;
419 OUTS( _uncompiledPredicated );
422 OUTS( _status_flags );
442 && _attrs.size() == 1
443 && _attrs.begin()->first == sat::SolvAttr::name ) )
453 && _kinds == rhs.
_kinds );
466 void compile()
const;
478 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
481 {
return new Impl( *
this ); }
508 void PoolQuery::Impl::compile()
const
510 _attrMatchList.clear();
512 if ( _flags.mode() == Match::OTHER )
533 else if (_attrs.size() == 1)
539 _attrMatchList.push_back( AttrMatchData( _attrs.begin()->first, joinedStrMatcher( joined, _flags ) ) );
546 bool attrvals_empty =
true;
547 for_( ai, _attrs.begin(), _attrs.end() )
549 if ( ai->second.empty() )
551 for_( it, ai->second.begin(), ai->second.end() )
555 attrvals_empty =
false;
559 if ( ! attrvals_empty )
564 bool attrvals_thesame =
true;
565 AttrRawStrMap::const_iterator ai = _attrs.begin();
568 for (; ai != _attrs.end(); ++ai)
572 set1.begin(), set1.end(),
573 ai->second.begin(), ai->second.end(),
574 inserter(result, result.begin()));
577 attrvals_thesame =
false;
586 if (attrvals_empty || attrvals_thesame)
600 StrMatcher matcher( joinedStrMatcher( joined, _flags ) );
601 for_( ai, _attrs.begin(), _attrs.end() )
603 _attrMatchList.push_back( AttrMatchData( ai->first, matcher ) );
613 for_(ai, _attrs.begin(), _attrs.end())
619 _attrMatchList.push_back( AttrMatchData( ai->first, joinedStrMatcher( joined, _flags ) ) );
625 if ( ! _uncompiledPredicated.empty() )
629 for_( it, _uncompiledPredicated.begin(), _uncompiledPredicated.end() )
631 if ( it->strMatcher.flags().mode() == Match::OTHER )
635 const std::string & mstr( it->strMatcher.searchstring() );
636 if ( ! mstr.empty() )
637 joined.insert( mstr );
640 AttrMatchData nattr( *it );
641 nattr.strMatcher = joinedStrMatcher( joined, _flags );
642 _attrMatchList.push_back( std::move(nattr) );
647 _attrMatchList.push_back( *it );
653 if ( _attrMatchList.empty() )
655 _attrMatchList.push_back( AttrMatchData( sat::SolvAttr::allAttr, joinedStrMatcher( _strings, _flags ) ) );
659 for_( it, _attrMatchList.begin(), _attrMatchList.end() )
661 it->strMatcher.compile();
673 std::string rxEscape( std::string str_r,
const Match & flags_r )
688 if ( container_r.empty() )
691 if ( container_r.size() == 1 && !_match_word )
692 return StrMatcher( *container_r.begin(), flags_r );
697 Match retflags( flags_r );
703 else if ( _match_word )
708 for ( const::std::string & s : container_r )
710 ret << sep << rxEscape( s, flags_r );
718 else if ( _match_word )
729 if ( _kinds.empty() )
733 for(Kinds::const_iterator it = _kinds.begin();
734 it != _kinds.end(); ++it)
740 if ( _repos.empty() )
744 for(StrContainer::const_iterator it = _repos.begin();
745 it != _repos.end(); ++it)
750 o <<
"version: "<< _op <<
" " << _edition.asString() << endl;
751 o <<
"status: " << ( _status_flags ? ( _status_flags == INSTALLED_ONLY ?
"INSTALLED_ONLY" :
"UNINSTALLED_ONLY" )
754 o <<
"string match flags: " <<
Match(_flags) << endl;
758 for(StrContainer::const_iterator it = _strings.begin();
759 it != _strings.end(); ++it)
763 o <<
"attributes: " << endl;
764 for(AttrRawStrMap::const_iterator ai = _attrs.begin(); ai != _attrs.end(); ++ai)
766 o <<
"* " << ai->first <<
": ";
767 for(StrContainer::const_iterator vi = ai->second.begin();
768 vi != ai->second.end(); ++vi)
773 o <<
"predicated: " << endl;
774 for_( it, _uncompiledPredicated.begin(), _uncompiledPredicated.end() )
776 o <<
"* " << *it << endl;
780 o <<
"last attribute matcher compiled: " << endl;
781 if ( _attrMatchList.empty() )
783 o <<
"not yet compiled" << endl;
787 for_( it, _attrMatchList.begin(), _attrMatchList.end() )
789 o <<
"* " << *it << endl;
803 PoolQuery::PoolQuery()
812 if (repoalias.empty())
814 WAR <<
"ignoring an empty repository alias" << endl;
841 if ( arch.
empty() && !explicitKind )
857 AttrMatchData attrMatchData(
attr );
864 attrMatchData.kindPredicate = explicitKind;
867 if ( isDependencyAttribute(
attr ) )
868 attrMatchData.addPredicate( EditionRangePredicate( op,
edition, arch ) );
870 attrMatchData.addPredicate( SolvableRangePredicate( op,
edition, arch ) );
884 if ( isDependencyAttribute(
attr ) )
885 attrMatchData.addPredicate( CapabilityMatchPredicate( cap_r ) );
887 attrMatchData.addPredicate( SolvableRangePredicate( cap.
op(), cap.
ed() ) );
931 return it !=
_pimpl->
_attrs.end() ? it->second : nocontainer;
1084 bool finded_something =
false;
1092 if ((!s.empty()) && s[0]==
'#')
1098 if (s.empty() || pos == s.npos)
1100 if (finded_something)
1110 finded_something =
true;
1112 string attrName(
str::trim(
string(s,0,pos)));
1113 string attrValue(
str::trim(
string(s,pos+1,s.npos)));
1157 WAR <<
"unknown string type " << attrValue << endl;
1161 WAR <<
"forget recover some attribute defined as String type attribute: " << attrValue << endl;
1181 WAR <<
"unknown boolean value " << attrValue << endl;
1186 if( attrValue ==
"all" )
1190 else if( attrValue ==
"installed" )
1194 else if( attrValue ==
"not-installed" )
1200 WAR <<
"Unknown value for install status " << attrValue << endl;
1207 if (attrValue.find_first_of(
"=<>!") == 0)
1209 pos = attrValue.find_last_of(
"=<>");
1210 rel =
Rel(attrValue.substr(0, pos+1));
1211 attrValue =
str::trim(attrValue.substr(pos+1, attrValue.npos));
1230 WAR <<
"empty attribute name" << endl;
1234 string s = attrName;
1237 if ( a == SolvAttr::name || isDependencyAttribute( a ) )
1271 if ( attrmatch.attr == SolvAttr::name && attrmatch.strMatcher.flags().mode() ==
Match::OTHER )
1276 std::vector<std::string> words;
1278 if ( words.size() < 4 || words[3].empty() )
1290 if ( attrmatch.kindPredicate )
1293 addKind( attrmatch.kindPredicate );
1297 addAttribute( SolvAttr::name, attrmatch.strMatcher.searchstring() );
1300 std::vector<std::string> words;
1302 if ( ! words.empty() )
1304 if ( words[0] ==
"EditionRange" || words[0] ==
"SolvableRange" )
1316 return finded_something;
1328 str <<
"repo: " << *it << delim ;
1334 << it->idStr() << delim ;
1349 <<
": substring" << delim;
1364 str <<
"case_sensitive: ";
1367 str <<
"on" << delim;
1371 str <<
"off" << delim;
1380 str <<
"install_status: all" << delim;
1383 str <<
"install_status: installed" << delim;
1386 str <<
"install_status: not-installed" << delim;
1398 string s = it->first.asString();
1400 for_( it2,it->second.begin(),it->second.end() )
1402 str << s <<
": "<< *it2 << delim;
1408 str <<
"complex: "<< it->serialize() << delim;
1468 if ( base_r ==
end() )
1476 while ( base_r !=
end() )
1491 if ( base_r ==
end() )
1503 return_r.push_back( base );
1506 for ( ++base; base.
inSolvable() == inSolvable; ++base )
1509 return_r.push_back( base );
1517 const AttrMatchData & matchData( *mi );
1519 if ( matchData.strMatcher )
1525 const AttrMatchData::Predicate &
predicate( matchData.predicate );
1529 return_r.push_back( it );
1547 for_( it, query_r->_repos.begin(), query_r->_repos.end() )
1561 _kinds = query_r->_kinds;
1584 if (
_repos.size() == 1 )
1593 if ( matchData.strMatcher )
1656 if ( matchData.kindPredicate )
1658 if ( matchData.kindPredicate != inSolvable.
kind() )
1664 else if ( !globalKindOk )
1667 if ( !matchData.predicate || matchData.predicate( base_r ) )
1676 const AttrMatchData & matchData( *mi );
1678 if ( matchData.kindPredicate )
1680 if ( matchData.kindPredicate != inSolvable.
kind() )
1683 else if ( !globalKindOk )
1687 if ( matchData.strMatcher )
1693 const AttrMatchData::Predicate &
predicate( matchData.predicate );
1735 if ( !
_matcher->advance( base_reference() ) )
1763 str << endl <<
" " << it->inSolvAttr() <<
"\t" << it->asString();
#define arrayBegin(A)
Simple C-array iterator.
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Edition::MatchRange _range
bool empty() const
Test for an empty Arch (this is Arch_epmty, not Arch_noarch ).
Helper providing more detailed information about a Capability.
Edition represents [epoch:]version[-release]
static const Edition noedition
Value representing noedition ("") This is in fact a valid Edition.
Base class for Exception.
std::string asUserHistory() const
A single (multiline) string composed of asUserString and historyAsString.
Base class for creating IdString based types.
std::string asString() const
Access to the sat-pools string space.
std::string asString() const
Conversion to std::string
String matching option flags as used e.g.
void setModeGlob()
Set the mode GLOB.
int get() const
Return the integer representation.
bool isModeSubstring() const
Whether this has mode SUBSTRING.
@ REGEX
Regular Expression.
@ SUBSTRING
Match substring.
bool isModeString() const
Whether this has mode STRING.
static const Match FILES
LookupAttr: match full path when matching in filelists, otherwise just the basenames.
void setModeRegex()
Set the mode REGEX.
static const Match NOCASE
If set, match case insensitive.
bool isModeGlob() const
Whether this has mode GLOB.
void setModeString()
Set the mode STRING.
void turn(const Match &rhs, bool onoff)
Depending on the value of onoff, set or unset flags.
bool isModeRegex() const
Whether this has mode REGEX.
bool test(const Match &rhs) const
Test whether all of the rhs bits are set (same mode if rhs has one).
void setModeSubstring()
Set the mode SUBSTRING.
Edition _edition
Edition condition operand.
Kinds _kinds
Kinds to search.
StrContainer _repos
Repos to search.
StatusFilter _status_flags
Sat solver status flags.
Rel _op
Operator for edition condition.
Match _flags
Sat solver search flags.
bool operator<(const PoolQuery::Impl &rhs) const
bool operator!=(const PoolQuery::Impl &rhs) const
string asString() const
String representation.
StrContainer _strings
Raw search strings.
std::set< AttrMatchData > _uncompiledPredicated
Uncompiled attributes with predicate.
AttrRawStrMap _attrs
Raw attributes.
Impl * clone() const
clone for RWCOW_pointer
AttrMatchList _attrMatchList
StrMatcher per attribtue.
bool operator==(const PoolQuery::Impl &rhs) const
Match flags() const
Free function to get libsolv repo search flags.
void addString(const std::string &value)
Add a global query string.
const Rel editionRel() const
std::set< std::string > StrContainer
bool matchSubstring() const
const StrContainer & repos() const
void setMatchExact()
Set to match exact string instead of substring.
void setMatchWord()
Set substring to match words.
void setMatchRegex()
Set to use the query strings as regexes.
const Edition edition() const
void setFlags(const Match &flags)
Free function to set libsolv repo search flags.
RW_pointer< Impl > _pimpl
Pointer to implementation.
void setCaseSensitive(bool value=true)
Turn case sentitivity on or off (unsets or sets SEARCH_NOCASE flag).
void execute(ProcessResolvable fnc)
Executes the query with the current settings.
void setStatusFilterFlags(StatusFilter flags)
Set status filter directly.
bool empty() const
Whether the result is empty.
void addKind(const ResKind &kind)
Filter by selectable kind.
bool operator==(const PoolQuery &b) const
void setRequireAll(bool require_all=true) ZYPP_DEPRECATED
void addAttribute(const sat::SolvAttr &attr, const std::string &value="")
Filter by the value of the specified attr attribute.
bool requireAll() const ZYPP_DEPRECATED
bool filesMatchFullPath() const
Whether searching in filelists looks at the full path or just at the basenames.
void addRepo(const std::string &repoalias)
Filter by repo.
const Kinds & kinds() const
Match::Mode matchMode() const
Returns string matching mode as enum.
void setInstalledOnly()
Return only @System repo packages.
const_iterator end() const
An iterator pointing to the end of the query result.
StatusFilter statusFilterFlags() const
const StrContainer & strings() const
Search strings added via addString()
std::set< ResKind > Kinds
std::string asString() const
Return a human-readable description of the query.
size_type size() const
Number of solvables in the query result.
const_iterator begin() const
Query result accessers.
bool recover(std::istream &str, char delim='\n')
Reads from stream query.
void serialize(std::ostream &str, char delim='\n') const
Writes a machine-readable string representation of the query to stream.
std::map< sat::SolvAttr, StrContainer > AttrRawStrMap
const AttrRawStrMap & attributes() const
Map (map<SolvAttr, StrContainer>) of attribute values added via addAttribute(), addDep in string form...
void addDependency(const sat::SolvAttr &attr, const std::string &name, const Rel &op, const Edition &edition)
Query "name|global op edition".
StatusFilter
Installed status filter setters.
void setEdition(const Edition &edition, const Rel &op=Rel::EQ)
Set version condition.
const StrContainer & attribute(const sat::SolvAttr &attr) const
void setMatchSubstring()
Set to substring (the default).
void setFilesMatchFullPath(bool value=true)
If set (default), look at the full path when searching in filelists.
void setUninstalledOnly()
Return only packages from repos other than @System.
function< bool(const sat::Solvable &)> ProcessResolvable
void setMatchGlob()
Set to match globs.
bool operator<(const PoolQuery &b) const
bool caseSensitive() const
returns true if search is case sensitive
bool isSystemRepo() const
Return whether this is the system repository.
static ResKind explicitBuiltin(const char *str_r)
Return the builtin kind if str_r explicitly prefixed.
String matching (STRING|SUBSTRING|GLOB|REGEX).
static const StringTypeAttr substringAttr
static const StringTypeAttr wordAttr
StringTypeAttr(const char *cstr_r)
StringTypeAttr(const std::string &str_r)
static const StringTypeAttr noAttr
static const StringTypeAttr globAttr
static const StringTypeAttr exactAttr
static const StringTypeAttr regexAttr
PoolQuery iterator as returned by PoolQuery::begin.
const Matches & matches() const
matches_iterator matchesEnd() const
End of matches.
bool matchesEmpty() const
False unless this is the end iterator.
shared_ptr< Matches > _matches
matches_iterator matchesBegin() const
Begin of matches.
shared_ptr< PoolQueryMatcher > _matcher
std::vector< sat::LookupAttr::iterator > Matches
Store PoolQuery settings and assist PoolQueryIterator.
sat::LookupAttr::iterator base_iterator
std::set< Repository > _repos
Repositories include in the search.
bool isAMatch(base_iterator &base_r) const
Check whether we are on a match.
bool advance(base_iterator &base_r) const
PoolQueryMatcher(const shared_ptr< const PoolQuery::Impl > &query_r)
Ctor stores the PoolQuery settings.
std::set< ResKind > _kinds
Resolvable kinds to include.
AttrMatchList _attrMatchList
StrMatcher per attribtue.
DefaultIntegral< bool, false > _neverMatchRepo
const base_iterator & end() const
void matchDetail(const base_iterator &base_r, std::vector< base_iterator > &return_r) const
Provide all matching attributes within this solvable.
base_iterator startNewQyery() const
Initialize a new base query.
int _status_flags
Installed status filter flags.
void stayInThisSolvable()
Stop after all matches in the current Solvable are processed.
void nextSkipSolvable()
On the next call to operator++ advance to the next Solvable.
Solvable inSolvable() const
The current Solvable.
void nextSkipRepo()
On the next call to operator++ advance to the next Repository.
Repository inRepo() const
The current Repository.
Lightweight attribute value lookup.
iterator end() const
Iterator behind the end of query results.
bool empty() const
Whether the query is empty.
void setStrMatcher(const StrMatcher &matcher_r)
Set the pattern to match.
void setAttr(SolvAttr attr_r)
Set the SolvAttr to search.
void setRepo(Repository repo_r, Location=SOLV_ATTR)
Set search in one Repository.
iterator begin() const
Iterator to the begin of query results.
Repository reposFind(const std::string &alias_r) const
Find a Repository named alias_r.
static Pool instance()
Singleton ctor.
static const SolvAttr name
static const SolvAttr allAttr
Value to request searching all Attributes (0).
A Solvable object within the sat Pool.
ResKind kind() const
The Solvables ResKind.
Edition edition() const
The edition (version-release).
bool isKind(const ResKind &kind_r) const
Test whether a Solvable is of a certain ResKind.
bool compareByRel(Rel op, const Tp &lhs, const Tp &rhs, TCompare compare)
Comparison of two elements using relational operator op.
std::ostream & operator<<(std::ostream &str, const zypp::shared_ptr< void > &obj)
String related utilities and Regular expression matching.
std::ostream & dumpOn(std::ostream &str, const PoolQueryIterator &obj)
std::string getline(std::istream &str)
Read one line from stream.
bool overlaps(Rel lhs, Rel rhs, int cmp)
Compute Range overlaps.
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).
bool strToFalse(const C_Str &str)
Return false if str is 0, false, no, off.
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.
std::string rxEscapeStr(std::string str_r)
Escape plain STRING str_r for use in a regex (not anchored by "^" or "$").
std::string rxEscapeGlob(std::string str_r)
Escape GLOB str_r for use in a regex (not anchored by "^" or "$").
bool strToTrue(const C_Str &str)
Parsing boolean from string.
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.
std::string trim(const std::string &s, const Trim trim_r)
Easy-to use interface to the ZYPP dependency resolver.
bool operator<(const StrMatcher &lhs, const StrMatcher &rhs)
std::string asString(const DefaultIntegral< Tp, TInitial > &obj)
bool operator==(const SetRelation::Enum &lhs, const SetCompare &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
std::ostream & operator<<(std::ostream &str, const Exception &obj)
const Arch Arch_empty(IdString::Empty)
bool operator!=(const SetRelation::Enum &lhs, const SetCompare &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
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::ostream & dumpOn(std::ostream &str, const Capability &obj)
bool deserialize(const std::string &str_r, DownloadMode &result_r)
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.
bool operator()(const string &str)
bool operator()(const string &str)
PoolQuery::StrContainer & _cont
MyInserter(PoolQuery::StrContainer &cont)
represents all atributes in PoolQuery except SolvAtributes, which are used as is (not needed extend a...
PoolQueryAttr(const std::string &str_r)
static const PoolQueryAttr stringAttr
static const PoolQueryAttr kindAttr
static const PoolQueryAttr editionAttr
static const PoolQueryAttr installStatusAttr
static const PoolQueryAttr repoAttr
static const PoolQueryAttr requireAllAttr
PoolQueryAttr(const char *cstr_r)
static const PoolQueryAttr caseSensitiveAttr
static const PoolQueryAttr noAttr
static const PoolQueryAttr complexAttr
static const PoolQueryAttr stringTypeAttr
constPtrType getPtr() const
for_use_in_switch inSwitch() const
Enumarator provided for use in switch statement.
for_use_in_switch _op
The operator.
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...