BOOST_CHECK_EQUAL( noe.detail().hasArch(), false );
BOOST_CHECK_EQUAL( naoe.detail().hasArch(), true );
- BOOST_REQUIRE ( n.detail().arch().empty() );
+ BOOST_CHECK ( n.detail().arch().empty() );
BOOST_CHECK_EQUAL( na.detail().arch(), Arch_i386.idStr() );
- BOOST_REQUIRE ( noe.detail().arch().empty() );
+ BOOST_CHECK ( noe.detail().arch().empty() );
BOOST_CHECK_EQUAL( naoe.detail().arch(), Arch_i386.idStr() );
BOOST_CHECK_EQUAL( Capability( "", "na.me", "", "" ), n );
BOOST_CHECK_EQUAL( Capability( "i386", "na.me", "", "" ), na );
BOOST_CHECK_EQUAL( Capability( "", "na.me", "==", "1" ), noe );
BOOST_CHECK_EQUAL( Capability( "i386", "na.me", "==", "1" ), naoe );
+
+ // explicit arch
+ BOOST_CHECK_EQUAL( Capability( Arch_i386, "na.me" ), na );
+ BOOST_CHECK_EQUAL( Capability( Arch_i386, "na.me == 1" ), naoe );
}
/** Full parse from string, unless Capability::PARSED.
*/
sat::detail::IdType relFromStr( ::_Pool * pool_r,
+ const Arch & arch_r, // parse from name if empty
const std::string & str_r, const ResKind & kind_r,
Capability::CtorFlag flag_r )
{
//else
// not a versioned relation
- return relFromStr( pool_r, name, op, ed, kind_r ); // parses for name[.arch]
+ if ( arch_r.empty() )
+ return relFromStr( pool_r, name, op, ed, kind_r ); // parses for name[.arch]
+ // else
+ return relFromStr( pool_r, arch_r, name, op, ed, kind_r );
}
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
Capability::Capability( const char * str_r, const ResKind & prefix_r, CtorFlag flag_r )
- : _id( relFromStr( myPool().getPool(), str_r, prefix_r, flag_r ) )
+ : _id( relFromStr( myPool().getPool(), Arch_empty, str_r, prefix_r, flag_r ) )
{}
Capability::Capability( const std::string & str_r, const ResKind & prefix_r, CtorFlag flag_r )
- : _id( relFromStr( myPool().getPool(), str_r.c_str(), prefix_r, flag_r ) )
+ : _id( relFromStr( myPool().getPool(), Arch_empty, str_r.c_str(), prefix_r, flag_r ) )
+ {}
+
+ Capability::Capability( const Arch & arch_r, const char * str_r, const ResKind & prefix_r, CtorFlag flag_r )
+ : _id( relFromStr( myPool().getPool(), arch_r, str_r, prefix_r, flag_r ) )
+ {}
+
+ Capability::Capability( const Arch & arch_r, const std::string & str_r, const ResKind & prefix_r, CtorFlag flag_r )
+ : _id( relFromStr( myPool().getPool(), arch_r, str_r.c_str(), prefix_r, flag_r ) )
{}
Capability::Capability( const char * str_r, CtorFlag flag_r, const ResKind & prefix_r )
- : _id( relFromStr( myPool().getPool(), str_r, prefix_r, flag_r ) )
+ : _id( relFromStr( myPool().getPool(), Arch_empty, str_r, prefix_r, flag_r ) )
{}
Capability::Capability( const std::string & str_r, CtorFlag flag_r, const ResKind & prefix_r )
- : _id( relFromStr( myPool().getPool(), str_r, prefix_r, flag_r ) )
+ : _id( relFromStr( myPool().getPool(), Arch_empty, str_r, prefix_r, flag_r ) )
+ {}
+
+ Capability::Capability( const Arch & arch_r, const char * str_r, CtorFlag flag_r, const ResKind & prefix_r )
+ : _id( relFromStr( myPool().getPool(), arch_r, str_r, prefix_r, flag_r ) )
+ {}
+
+ Capability::Capability( const Arch & arch_r, const std::string & str_r, CtorFlag flag_r, const ResKind & prefix_r )
+ : _id( relFromStr( myPool().getPool(), arch_r, str_r, prefix_r, flag_r ) )
{}
///////////////////////////////////////////////////////////////////
/** Ctor from id. */
explicit Capability( sat::detail::IdType id_r ) : _id( id_r ) {}
- /** \name Ctors parsing a Capability: <tt>"name[.arch] [op edition]"</tt>
+ /** \name Ctors parsing a Capability: <tt>"name[.arch] [op edition]"</tt> or <tt>( arch, "name [op edition]")</tt>
*/
//@{
/** Ctor from string.
explicit Capability( const char * str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
/** \overload */
explicit Capability( const std::string & str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
- /** \overload Convenience for parsed (name only) packages. */
+ /** \overload Explicitly specify the \c arch. */
+ Capability( const Arch & arch_r, const char * str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
+ /** \overload Explicitly specify the \c arch. */
+ Capability( const Arch & arch_r, const std::string & str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
+
+ /** \overload Convenience for parsed (name only, no <tt>"[op edition]</tt>) packages: <tt>Capability( "glibc", PARSED ); */
Capability( const char * str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
/** \overload */
Capability( const std::string & str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
+ /** \overload Explicitly specify the \c arch. */
+ Capability( const Arch & arch_r, const char * str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
+ /** \overload */
+ Capability( const Arch & arch_r, const std::string & str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
//@}
+
/** \name Ctors parsing a broken down Capability: <tt>( "name[.arch]", op, edition )</tt>
*/
//@{