View Javadoc

1   /*******************************************************************************
2   * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2008 Daniel Le Berre
3   *
4   * All rights reserved. This program and the accompanying materials
5   * are made available under the terms of the Eclipse Public License v1.0
6   * which accompanies this distribution, and is available at
7   * http://www.eclipse.org/legal/epl-v10.html
8   *
9   * Alternatively, the contents of this file may be used under the terms of
10  * either the GNU Lesser General Public License Version 2.1 or later (the
11  * "LGPL"), in which case the provisions of the LGPL are applicable instead
12  * of those above. If you wish to allow use of your version of this file only
13  * under the terms of the LGPL, and not to allow others to use your version of
14  * this file under the terms of the EPL, indicate your decision by deleting
15  * the provisions above and replace them with the notice and other provisions
16  * required by the LGPL. If you do not delete the provisions above, a recipient
17  * may use your version of this file under the terms of the EPL or the LGPL.
18  * 
19  * Based on the original MiniSat specification from:
20  * 
21  * An extensible SAT solver. Niklas Een and Niklas Sorensson. Proceedings of the
22  * Sixth International Conference on Theory and Applications of Satisfiability
23  * Testing, LNCS 2919, pp 502-518, 2003.
24  *
25  * See www.minisat.se for the original solver in C++.
26  * 
27  *******************************************************************************/
28  package org.sat4j.minisat.core;
29  
30  import java.util.Set;
31  
32  import org.sat4j.specs.IVecInt;
33  
34  /**
35   * Vocabulary in which literals can be marked.
36   * 
37   * @author daniel
38   * 
39   */
40  public interface IMarkableLits extends ILits {
41      int MARKLESS = 0;
42  
43      /**
44       * Mark a given literal with a given mark.
45       * 
46       * @param p
47       *            the literal
48       * @param mark
49       *            an integer used to mark the literal. The specific mark
50       *            MARKLESS is used to denote that the literal is not marked. The
51       *            marks are supposed to be positive in the most common cases.
52       */
53      void setMark(int p, int mark);
54  
55      /**
56       * Mark a given literal.
57       * 
58       * @param p
59       *            a literal
60       */
61      void setMark(int p);
62  
63      /**
64       * To get the mark for a given literal.
65       * 
66       * @param p
67       *            a literal
68       * @return the mark associated with that literal, or MARKLESS if the literal
69       *         is not marked.
70       */
71      int getMark(int p);
72  
73      /**
74       * To know if a given literal is marked, i.e. has a mark different from
75       * MARKLESS.
76       * 
77       * @param p
78       *            a literal
79       * @return true iif the literal is marked.
80       */
81      boolean isMarked(int p);
82  
83      /**
84       * Set the mark of a given literal to MARKLESS.
85       * 
86       * @param p
87       *            a literal
88       */
89      void resetMark(int p);
90  
91      /**
92       * Set all the literal marks to MARKLESS
93       * 
94       */
95      void resetAllMarks();
96  
97      /**
98       * Returns the set of all marked literals.
99       * 
100      * @return a set of literals whose mark is different from MARKLESS.
101      */
102     IVecInt getMarkedLiterals();
103 
104     /**
105      * Returns that set of all the literals having a specific mark.
106      * 
107      * @param mark
108      *            a mark
109      * @return a set of literals whose mark is mark
110      */
111     IVecInt getMarkedLiterals(int mark);
112 
113     /**
114      * Returns the set of all marked variables. A variable is marked iff at
115      * least one of its literal is marked.
116      * 
117      * @return a set of variables whose mark is different from MARKLESS.
118      */
119     IVecInt getMarkedVariables();
120 
121     /**
122      * Returns the set of all variables having a specific mark. A variable is
123      * marked iff at least one of its literal is marked.
124      * 
125      * @param mark
126      *            a mark.
127      * @return a set of variables whose mark is mark.
128      */
129     IVecInt getMarkedVariables(int mark);
130 
131     /**
132      * 
133      * @return a list of marks used to mark the literals.
134      */
135     Set<Integer> getMarks();
136 }