diff --git a/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java b/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java index 25383f2082d0295b00aee2c026ddf8a01751ff09..a436d927392cc8f2794336ffc6bf4cc2236f80aa 100644 --- a/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java +++ b/src/fr/inrialpes/exmo/align/impl/BitSetDisjunctiveRelation.java @@ -121,6 +121,24 @@ public abstract class BitSetDisjunctiveRelation<T extends BaseRelation> extends return relset.isEmpty(); } + public boolean entails( BitSetDisjunctiveRelation<T> dr ) { + if ( dr == this ) return true; + if ( dr == null ) return false; + // This does allocate but is certainly faster and simpler + BitSet bs = (BitSet)relset.clone(); + bs.andNot( ((BitSetDisjunctiveRelation<?>)dr).getRelations() ); + return bs.isEmpty(); + /* + // This does not allocate but is certainly slower + BitSet bs = ((BitSetDisjunctiveRelation<?>)dr).getRelations(); + int size = relset.size(); // is it correct? + for( int i=0; i < size; i++ ) { + if ( bs.get(i) && !relset.get(i) ) return false; + } + return true; + */ + } + /** This is kept for displayig more correctly the result **/ public void write( PrintWriter writer ) { Iterator<T> brit = iterator(); diff --git a/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java b/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java index 45c423fd5bdf9e76459a18a2bbd48eb404a52306..1864ec4c04146afc3111ddd4622add87df094b2d 100644 --- a/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java +++ b/src/fr/inrialpes/exmo/align/impl/DisjunctiveRelation.java @@ -45,5 +45,7 @@ public interface DisjunctiveRelation<T extends BaseRelation> extends Relation, I public boolean isEmpty(); + //public boolean entails( DisjunctiveRelation<T> dr ); + }