@@ -645,14 +645,16 @@ solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker)
645645}
646646
647647int
648- solvable_matchessolvable_int (Solvable * s , Id keyname , int marker , Id solvid , Map * solvidmap , Queue * depq , Map * missc , int reloff )
648+ solvable_matchessolvable_int (Solvable * s , Id keyname , int marker , Id solvid , Map * solvidmap , Queue * depq , Map * missc , int reloff , Queue * outdepq )
649649{
650650 Pool * pool = s -> repo -> pool ;
651651 int i , boff ;
652652 Id * wp ;
653653
654654 if (depq -> count )
655655 queue_empty (depq );
656+ if (outdepq && outdepq -> count )
657+ queue_empty (outdepq );
656658 solvable_lookup_deparray (s , keyname , depq , marker );
657659 for (i = 0 ; i < depq -> count ; i ++ )
658660 {
@@ -695,15 +697,46 @@ solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map
695697 {
696698 for (; * wp ; wp ++ )
697699 if (MAPTST (solvidmap , * wp ))
698- return 1 ;
700+ break ;
699701 }
700702 else
701703 {
702704 for (; * wp ; wp ++ )
703705 if (* wp == solvid )
704- return 1 ;
706+ break ;
707+ }
708+ if (* wp )
709+ {
710+ if (outdepq )
711+ {
712+ queue_pushunique (outdepq , dep );
713+ continue ;
714+ }
715+ return 1 ;
705716 }
706717 MAPSET (missc , boff );
707718 }
708- return 0 ;
719+ return outdepq && outdepq -> count ? 1 : 0 ;
720+ }
721+
722+ int
723+ solvable_matchessolvable (Solvable * s , Id keyname , int marker , Id solvid , Queue * depq )
724+ {
725+ Pool * pool = s -> repo -> pool ;
726+ Map missc ; /* cache for misses */
727+ int res , reloff ;
728+ Queue qq ;
729+
730+ if (depq && depq -> count )
731+ queue_empty (depq );
732+ if (s - pool -> solvables == solvid )
733+ return 0 ; /* no self-matches */
734+
735+ queue_init (& qq );
736+ reloff = pool -> ss .nstrings ;
737+ map_init (& missc , reloff + pool -> nrels );
738+ res = solvable_matchessolvable_int (s , keyname , marker , solvid , 0 , & qq , & missc , reloff , depq );
739+ map_free (& missc );
740+ queue_free (& qq );
741+ return res ;
709742}
0 commit comments