Author: kkaempf Date: Wed Feb 20 15:52:20 2008 New Revision: 8839 URL: http://svn.opensuse.org/viewcvs/zypp?rev=8839&view=rev Log: implement equality and comparison for XSolvable Modified: trunk/sat-solver/applayer/xsolvable.c trunk/sat-solver/applayer/xsolvable.h trunk/sat-solver/bindings/satsolver.i Modified: trunk/sat-solver/applayer/xsolvable.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/applayer/xsolvable.c?rev=8839&r1=8838&r2=8839&view=diff ============================================================================== --- trunk/sat-solver/applayer/xsolvable.c (original) +++ trunk/sat-solver/applayer/xsolvable.c Wed Feb 20 15:52:20 2008 @@ -71,6 +71,23 @@ return pool_id2solvable( xs->pool, xs->id ); } +/* + * equality + */ + +int +xsolvable_equal( XSolvable *xs1, XSolvable *xs2 ) +{ + if (xs1 != xs2) + { + if ((xs1->pool != xs2->pool) + || (xs1->id != xs2->id)) + { + return 0; + } + } + return 1; +} /************************************************ * Pool/Repo Modified: trunk/sat-solver/applayer/xsolvable.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/applayer/xsolvable.h?rev=8839&r1=8838&r2=8839&view=diff ============================================================================== --- trunk/sat-solver/applayer/xsolvable.h (original) +++ trunk/sat-solver/applayer/xsolvable.h Wed Feb 20 15:52:20 2008 @@ -49,6 +49,12 @@ void xsolvable_free( XSolvable *xs ); /* + * Check for equality + * Two XSolvables are equal if they both reference the same Id of the same pool. + */ +int xsolvable_equal( XSolvable *xs1, XSolvable *xs2 ); + +/* * Return the Solvable corresponding to the given XSolvable */ Solvable *xsolvable_solvable( const XSolvable *xs ); Modified: trunk/sat-solver/bindings/satsolver.i URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/bindings/satsolver.i?rev=8839&r1=8838&r2=8839&view=diff ============================================================================== --- trunk/sat-solver/bindings/satsolver.i (original) +++ trunk/sat-solver/bindings/satsolver.i Wed Feb 20 15:52:20 2008 @@ -902,6 +902,45 @@ return solvable2str( $self->pool, xsolvable_solvable( $self ) ); } +#if defined(SWIGRUBY) + %rename( "==" ) equal( const XSolvable *xs ); + %typemap(out) int equal + "$result = ($1 != 0) ? Qtrue : Qfalse;"; +#endif + int equal( XSolvable *xs ) + { return xsolvable_equal( $self, xs); } + +#if defined(SWIGRUBY) + %alias cmp "<=>"; +#endif + int cmp( XSolvable *xs ) + { + Solvable *s1 = xsolvable_solvable( $self ); + Solvable *s2 = xsolvable_solvable( xs ); + const char *n1 = 0, *n2 = 0; + int i = 0; + + if (($self->pool != xs->pool) + || (s1->name != s2->name)) + { + n1 = id2str( $self->pool, s1->name ); + n2 = id2str( xs->pool, s2->name ); + i = strcmp( n1, n2 ); + } + if (i == 0) /* names are equal */ + { + if ($self->pool == xs->pool) + i = evrcmp( $self->pool, s1->evr, s2->evr, EVRCMP_COMPARE ); + else + { + n1 = id2str( $self->pool, s1->evr ); + n2 = id2str( xs->pool, s2->evr ); + i = strcmp( n1, n2 ); + } + } + return i; + } + /* * Dependencies */ -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org