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 );
324 ::dataiterator_strdup(
_dip );
332 ::dataiterator_free(
_dip );
338 {
return str << obj.
get(); }
361 {
if ( _dip ) ::dataiterator_skip_attribute( _dip.get() ); }
364 {
if ( _dip ) ::dataiterator_skip_solvable( _dip.get() ); }
367 {
if ( _dip ) ::dataiterator_skip_repo( _dip.get() ); }
370 {
if ( _dip ) { _dip.get()->repoid = -1; _dip.get()->flags |= SEARCH_THISSOLVID; } }
373 {
if ( _dip ) { _dip.get()->repoid = -1; } }
384 switch ( solvAttrType() )
386 case REPOKEY_TYPE_U32:
387 case REPOKEY_TYPE_NUM:
388 case REPOKEY_TYPE_CONSTANT:
397 switch ( solvAttrType() )
399 case REPOKEY_TYPE_ID:
400 case REPOKEY_TYPE_IDARRAY:
401 case REPOKEY_TYPE_CONSTANTID:
402 case REPOKEY_TYPE_STR:
403 case REPOKEY_TYPE_DIRSTRARRAY:
412 switch ( solvAttrType() )
414 case REPOKEY_TYPE_ID:
415 case REPOKEY_TYPE_IDARRAY:
416 case REPOKEY_TYPE_CONSTANTID:
425 switch ( solvAttrType() )
427 case REPOKEY_TYPE_MD5:
428 case REPOKEY_TYPE_SHA1:
429 case REPOKEY_TYPE_SHA256:
439 enum SubType { ST_NONE,
446 if ( dip.
get()->key->type == REPOKEY_TYPE_FLEXARRAY )
448 return dip.
get()->kv.parent ? ST_SUB : ST_NONE;
454 {
return subType( _dip ) != ST_NONE; }
461 {
return( subBegin() == subEnd() ); }
466 for_( it, subBegin(), subEnd() )
473 SubType subtype( subType( _dip ) );
474 if ( subtype == ST_NONE )
478 ::dataiterator_clonepos( dip.
get(), _dip.get() );
484 ::dataiterator_seek( dip.
get(), DI_SEEK_CHILD|DI_SEEK_STAY );
487 ::dataiterator_seek( dip.
get(), DI_SEEK_REWIND|DI_SEEK_STAY );
503 while ( it != subEnd() && it.
inSolvAttr() != attr_r )
511 if ( attrname_r.
empty() )
514 SubType subtype( subType( _dip ) );
515 if ( subtype == ST_NONE )
518 std::string subattr( inSolvAttr().
asString() );
519 if ( subtype == ST_FLEX )
523 subattr += attrname_r;
529 if ( pos != std::string::npos )
531 subattr.erase( pos+1 );
532 subattr += attrname_r;
535 subattr = attrname_r;
537 return subFind(
SolvAttr( subattr ) );
548 switch ( solvAttrType() )
550 case REPOKEY_TYPE_U32:
551 case REPOKEY_TYPE_NUM:
552 case REPOKEY_TYPE_CONSTANT:
567 switch ( solvAttrType() )
569 case REPOKEY_TYPE_U32:
570 case REPOKEY_TYPE_NUM:
571 case REPOKEY_TYPE_CONSTANT:
572 return SOLV_KV_NUM64(&_dip->kv);
587 switch ( solvAttrType() )
589 case REPOKEY_TYPE_ID:
590 case REPOKEY_TYPE_IDARRAY:
591 case REPOKEY_TYPE_CONSTANTID:
592 if ( _dip->data && _dip->data->localpool )
593 return ::stringpool_id2str( &_dip->data->spool, _dip->kv.id );
598 case REPOKEY_TYPE_STR:
602 case REPOKEY_TYPE_DIRSTRARRAY:
604 return( _dip->flags & SEARCH_FILES
606 : ::repodata_dir2str( _dip->data, _dip->kv.id, _dip->kv.str ) );
617 switch ( solvAttrType() )
619 case REPOKEY_TYPE_ID:
620 case REPOKEY_TYPE_IDARRAY:
621 case REPOKEY_TYPE_CONSTANTID:
623 detail::IdType id = ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 );
629 case REPOKEY_TYPE_STR:
630 case REPOKEY_TYPE_DIRSTRARRAY:
632 const char * ret( c_str() );
633 return ret ? ret :
"";
637 case REPOKEY_TYPE_U32:
638 case REPOKEY_TYPE_NUM:
639 case REPOKEY_TYPE_CONSTANT:
643 case REPOKEY_TYPE_MD5:
644 case REPOKEY_TYPE_SHA1:
645 case REPOKEY_TYPE_SHA256:
647 return asCheckSum().asString();
651 case REPOKEY_TYPE_FLEXARRAY:
653 std::ostringstream str;
655 for_( it, subBegin(), subEnd() )
657 str <<
" " << it.inSolvAttr() <<
" = " << it.asString() << endl;
665 return std::string();
672 switch ( solvAttrType() )
674 case REPOKEY_TYPE_ID:
675 case REPOKEY_TYPE_IDARRAY:
676 case REPOKEY_TYPE_CONSTANTID:
677 return IdString( ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 ) );
688 switch ( solvAttrType() )
690 case REPOKEY_TYPE_MD5:
691 return CheckSum::md5( ::repodata_chk2str( _dip->data, solvAttrType(), (
unsigned char *)_dip->kv.str ) );
694 case REPOKEY_TYPE_SHA1:
695 return CheckSum::sha1( ::repodata_chk2str( _dip->data, solvAttrType(), (
unsigned char *)_dip->kv.str ) );
698 case REPOKEY_TYPE_SHA256:
699 return CheckSum::sha256( ::repodata_chk2str( _dip->data, solvAttrType(), (
unsigned char *)_dip->kv.str ) );
711 : iterator_adaptor_( 0 )
715 : iterator_adaptor_( 0 )
722 : iterator_adaptor_( 0 )
737 base_reference() = _dip.
get();
748 return( lhs.solvid == rhs.solvid && lhs.key->name == rhs.key->name );
753 return _dip ? ::repodata_globalize_id( _dip->data, _dip->kv.id, 1 )
761 if ( ! ::dataiterator_step( _dip.get() ) )
764 base_reference() = 0;
768 ::dataiterator_strdup( _dip.get() );
775 const ::_Dataiterator * dip = obj.
get();
777 return str <<
"EndOfQuery";
789 template<>
CheckSum LookupAttr::iterator::asType<CheckSum>()
const
790 {
return asCheckSum(); }
799 std::ostream &
operator<<( std::ostream & str, const ::_Dataiterator * obj )
801 str <<
"::_Dataiterator(";
811 str <<
"|" << zypp::IdString(obj->key->type);
812 str <<
"|" << obj->repodataid;
813 str <<
"|" << obj->repoid;