140 ::dataiterator_prepend_keyname( dip.get(),
_parent.
id() );
156 friend Impl * rwcowClone<Impl>(
const Impl * rhs );
159 {
return new Impl( *
this ); }
173 : _pimpl( new
Impl( attr_r, loc_r ) )
176 : _pimpl( new
Impl( attr_r, loc_r ) )
180 : _pimpl( new
Impl( attr_r, repo_r, loc_r ) )
183 : _pimpl( new
Impl( attr_r, repo_r, loc_r ) )
187 : _pimpl( new
Impl( attr_r, solv_r ) )
190 : _pimpl( new
Impl( attr_r, solv_r ) )
258 return str <<
"search nothing";
261 str <<
"seach " << obj.
attr() <<
" in ";
263 str <<
"seach ALL in ";
268 return str << obj.
repo();
269 return str <<
"pool";
299 const std::string & mstring_r,
int flags_r )
300 : _dip( new ::Dataiterator )
301 , _mstring( mstring_r )
308 const char * mstring_r,
int flags_r )
309 : _dip( new ::Dataiterator )
310 , _mstring( mstring_r ? mstring_r :
"" )
318 , _mstring( rhs._mstring )
322 _dip = new ::Dataiterator;
323 ::dataiterator_init_clone(
_dip, rhs.
_dip );
331 ::dataiterator_free(
_dip );
337 {
return str << obj.
get(); }
360 {
if ( _dip ) ::dataiterator_skip_attribute( _dip.get() ); }
363 {
if ( _dip ) ::dataiterator_skip_solvable( _dip.get() ); }
366 {
if ( _dip ) ::dataiterator_skip_repo( _dip.get() ); }
369 {
if ( _dip ) { _dip.get()->repoid = -1; _dip.get()->flags |= SEARCH_THISSOLVID; } }
372 {
if ( _dip ) { _dip.get()->repoid = -1; } }
383 switch ( solvAttrType() )
385 case REPOKEY_TYPE_U32:
386 case REPOKEY_TYPE_NUM:
387 case REPOKEY_TYPE_CONSTANT:
396 switch ( solvAttrType() )
398 case REPOKEY_TYPE_ID:
399 case REPOKEY_TYPE_IDARRAY:
400 case REPOKEY_TYPE_CONSTANTID:
401 case REPOKEY_TYPE_STR:
402 case REPOKEY_TYPE_DIRSTRARRAY:
411 switch ( solvAttrType() )
413 case REPOKEY_TYPE_ID:
414 case REPOKEY_TYPE_IDARRAY:
415 case REPOKEY_TYPE_CONSTANTID:
424 switch ( solvAttrType() )
426 case REPOKEY_TYPE_MD5:
427 case REPOKEY_TYPE_SHA1:
428 case REPOKEY_TYPE_SHA256:
438 enum SubType { ST_NONE,
445 if ( dip.
get()->key->type == REPOKEY_TYPE_FLEXARRAY )
447 return dip.
get()->kv.parent ? ST_SUB : ST_NONE;
453 {
return subType( _dip ) != ST_NONE; }
460 {
return( subBegin() == subEnd() ); }
465 for_( it, subBegin(), subEnd() )
472 SubType subtype( subType( _dip ) );
473 if ( subtype == ST_NONE )
477 ::dataiterator_clonepos( dip.
get(), _dip.get() );
483 ::dataiterator_seek( dip.
get(), DI_SEEK_CHILD|DI_SEEK_STAY );
486 ::dataiterator_seek( dip.
get(), DI_SEEK_REWIND|DI_SEEK_STAY );
502 while ( it != subEnd() && it.
inSolvAttr() != attr_r )
510 if ( attrname_r.
empty() )
513 SubType subtype( subType( _dip ) );
514 if ( subtype == ST_NONE )
517 std::string subattr( inSolvAttr().
asString() );
518 if ( subtype == ST_FLEX )
522 subattr += attrname_r;
528 if ( pos != std::string::npos )
530 subattr.erase( pos+1 );
531 subattr += attrname_r;
534 subattr = attrname_r;
536 return subFind(
SolvAttr( subattr ) );
547 switch ( solvAttrType() )
549 case REPOKEY_TYPE_U32:
550 case REPOKEY_TYPE_NUM:
551 case REPOKEY_TYPE_CONSTANT:
566 switch ( solvAttrType() )
568 case REPOKEY_TYPE_U32:
569 case REPOKEY_TYPE_NUM:
570 case REPOKEY_TYPE_CONSTANT:
571 return SOLV_KV_NUM64(&_dip->kv);
586 switch ( solvAttrType() )
588 case REPOKEY_TYPE_ID:
589 case REPOKEY_TYPE_IDARRAY:
590 case REPOKEY_TYPE_CONSTANTID:
591 if ( _dip->data && _dip->data->localpool )
592 return ::stringpool_id2str( &_dip->data->spool, _dip->kv.id );
597 case REPOKEY_TYPE_STR:
601 case REPOKEY_TYPE_DIRSTRARRAY:
602 return ::repodata_dir2str( _dip->data, _dip->kv.id, _dip->kv.str );
613 switch ( solvAttrType() )
615 case REPOKEY_TYPE_ID:
616 case REPOKEY_TYPE_IDARRAY:
617 case REPOKEY_TYPE_CONSTANTID:
619 detail::IdType id = ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 );
625 case REPOKEY_TYPE_STR:
626 case REPOKEY_TYPE_DIRSTRARRAY:
628 const char * ret( c_str() );
629 return ret ? ret :
"";
633 case REPOKEY_TYPE_U32:
634 case REPOKEY_TYPE_NUM:
635 case REPOKEY_TYPE_CONSTANT:
639 case REPOKEY_TYPE_MD5:
640 case REPOKEY_TYPE_SHA1:
641 case REPOKEY_TYPE_SHA256:
643 return asCheckSum().asString();
647 case REPOKEY_TYPE_FLEXARRAY:
649 std::ostringstream str;
651 for_( it, subBegin(), subEnd() )
653 str <<
" " << it.inSolvAttr() <<
" = " << it.asString() << endl;
661 return std::string();
668 switch ( solvAttrType() )
670 case REPOKEY_TYPE_ID:
671 case REPOKEY_TYPE_IDARRAY:
672 case REPOKEY_TYPE_CONSTANTID:
673 return IdString( ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 ) );
684 switch ( solvAttrType() )
686 case REPOKEY_TYPE_MD5:
687 return CheckSum::md5( ::repodata_chk2str( _dip->data, solvAttrType(), (
unsigned char *)_dip->kv.str ) );
690 case REPOKEY_TYPE_SHA1:
691 return CheckSum::sha1( ::repodata_chk2str( _dip->data, solvAttrType(), (
unsigned char *)_dip->kv.str ) );
694 case REPOKEY_TYPE_SHA256:
695 return CheckSum::sha256( ::repodata_chk2str( _dip->data, solvAttrType(), (
unsigned char *)_dip->kv.str ) );
707 : iterator_adaptor_( 0 )
711 : iterator_adaptor_( 0 )
718 : iterator_adaptor_( 0 )
733 base_reference() = _dip.
get();
744 return( lhs.solvid == rhs.solvid && lhs.key->name == rhs.key->name );
749 return _dip ? ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 )
755 if ( _dip && ! ::dataiterator_step( _dip.get() ) )
758 base_reference() = 0;
764 const ::_Dataiterator * dip = obj.
get();
766 return str <<
"EndOfQuery";
778 template<>
CheckSum LookupAttr::iterator::asType<CheckSum>()
const
779 {
return asCheckSum(); }
788 std::ostream &
operator<<( std::ostream & str, const ::_Dataiterator * obj )
790 str <<
"::_Dataiterator(";
800 str <<
"|" << zypp::IdString(obj->key->type);
801 str <<
"|" << obj->repodataid;
802 str <<
"|" << obj->repoid;