View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  
16  package org.qedeq.kernel.se.base.list;
17  
18  import java.util.List;
19  
20  /**
21   * Every Operator must implement this interface. Each operator deals with arguments. These arguments
22   * form an ordered list. So there is the number of arguments, which is told by {@link #size} and the
23   * <code>i</code>-th argument, accessible by {@link #getElement(int)}.
24   *
25   * @author Michael Meyling
26   */
27  public interface ElementList extends Element {
28  
29      /**
30       * Get the number of arguments.
31       *
32       * @return Number of arguments.
33       */
34      public int size();
35  
36      /**
37       * Get the operator.
38       *
39       * @return Operator.
40       */
41      public String getOperator();
42  
43      /**
44       * Get the requested argument.
45       *
46       * @param i Number of argument (starting with <code>0</code>).
47       * @return <code>i</code>-th part formula.
48       * @throws IllegalArgumentException <code>i</code> is not between <code>0</code> and
49       *             <code>{@link #size()} - 1</code>
50       */
51      public Element getElement(int i);
52  
53      /**
54       * Get all arguments as an list.
55       *
56       * @return All elements.
57       */
58      public List getElements();
59  
60      /**
61       * TODO 20110327 m31: do we have to use modifying methods like this or {@link ElementList#remove(int)}
62       * and so on? If we need them we have to make a deep copy. Otherwise we can save lots of space!
63       * Adds an element to end of list.
64       *
65       * @param element Element to add.
66       * @throws IllegalArgumentException The given element was a NullPointer.
67       */
68      public void add(final Element element);
69  
70      /**
71       * Inserts an element to specified position.
72       *
73       * @param position Position of element to add.
74       * @param element Element to add.
75       * @throws IllegalArgumentException The given element was a NullPointer or the position was not
76       *             valid.
77       */
78      public void insert(int position, final Element element);
79  
80      /**
81       * Replaces an element at specified position.
82       *
83       * @param position Position of element to replace.
84       * @param element Replacement element.
85       * @throws IllegalArgumentException The given element was a NullPointer or the position was not
86       *             valid.
87       */
88      public void replace(int position, final Element element);
89  
90      /**
91       * Deletes an element of element list.
92       *
93       * @param i Position of element to remove.
94       * @throws IllegalArgumentException The given position was not valid.
95       */
96      public void remove(final int i);
97  
98  }