View Javadoc

1   /*
2    * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2006 Daniel Le Berre
3    * 
4    * Based on the original minisat specification from:
5    * 
6    * An extensible SAT solver. Niklas E?n and Niklas S?rensson. Proceedings of the
7    * Sixth International Conference on Theory and Applications of Satisfiability
8    * Testing, LNCS 2919, pp 502-518, 2003.
9    * 
10   * This library is free software; you can redistribute it and/or modify it under
11   * the terms of the GNU Lesser General Public License as published by the Free
12   * Software Foundation; either version 2.1 of the License, or (at your option)
13   * any later version.
14   * 
15   * This library is distributed in the hope that it will be useful, but WITHOUT
16   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18   * details.
19   * 
20   * You should have received a copy of the GNU Lesser General Public License
21   * along with this library; if not, write to the Free Software Foundation, Inc.,
22   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23   * 
24   */
25  
26  package org.sat4j.specs;
27  
28  /**
29   * An abstraction for the vector of int used on the library.
30   * 
31   * @author leberre
32   */
33  public interface IVecInt extends Iterable<Integer> {
34  
35      public abstract int size();
36  
37      /**
38       * Remove the latest nofelems elements from the vector
39       * 
40       * @param nofelems
41       */
42      public abstract void shrink(int nofelems);
43  
44      public abstract void shrinkTo(int newsize);
45  
46      /**
47       * depile le dernier element du vecteur. Si le vecteur est vide, ne
48       * fait rien.
49       */
50      public abstract IVecInt pop();
51  
52      public abstract void growTo(int newsize, final int pad);
53  
54      public abstract void ensure(int nsize);
55  
56      public abstract IVecInt push(int elem);
57  
58      /**
59       * Push the element in the Vector without verifying if there is room for it.
60       * USE WITH CAUTION!
61       * 
62       * @param elem
63       */
64      void unsafePush(int elem);
65  
66      int unsafeGet(int eleem);
67  
68      public abstract void clear();
69  
70      public abstract int last();
71  
72      public abstract int get(int i);
73  
74      public abstract void set(int i, int o);
75  
76      public abstract boolean contains(int e);
77  
78      /**
79       * C'est operations devraient se faire en temps constant. Ce n'est pas le
80       * cas ici.
81       * 
82       * @param copy
83       */
84      public abstract void copyTo(IVecInt copy);
85  
86      /**
87       * @param is
88       */
89      public abstract void copyTo(int[] is);
90  
91      /*
92       * Copie un vecteur dans un autre (en vidant le premier), en temps constant.
93       */
94      public abstract void moveTo(IVecInt dest);
95  
96      public abstract void moveTo2(IVecInt dest);
97  
98      public abstract void moveTo(int[] dest);
99  
100     /**
101      * Move elements inside the vector. The content of the method is equivalent
102      * to: <code>vec[dest] = vec[source]</code>
103      * 
104      * @param dest
105      *            the index of the destination
106      * @param source
107      *            the index of the source
108      */
109     void moveTo(int dest, int source);
110 
111     /**
112      * Insert an element at the very begining of the vector. The former first
113      * element is appended to the end of the vector in order to have a constant
114      * time operation.
115      * 
116      * @param elem
117      *            the element to put first in the vector.
118      */
119     public abstract void insertFirst(final int elem);
120 
121     /**
122      * Enleve un element qui se trouve dans le vecteur!!!
123      * 
124      * @param elem
125      *            un element du vecteur
126      */
127     public abstract void remove(int elem);
128 
129     /**
130      * Delete the ith element of the vector. The latest element of the vector
131      * replaces the removed element at the ith indexer.
132      * 
133      * @param i
134      *            the indexer of the element in the vector
135      * @return the former ith element of the vector that is now removed from the
136      *         vector
137      */
138     public abstract int delete(int i);
139 
140     public abstract void sort();
141 
142     public abstract void sortUnique();
143 
144     /**
145      * To know if a vector is empty
146      * 
147      * @return true iff the vector is empty.
148      * @since 1.6
149      */
150     boolean isEmpty();
151 }