Mercurial > projects > ldc
comparison tango/tango/util/collection/model/SeqView.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
1 /* | |
2 File: SeqView.d | |
3 | |
4 Originally written by Doug Lea and released into the public domain. | |
5 Thanks for the assistance and support of Sun Microsystems Labs, Agorics | |
6 Inc, Loral, and everyone contributing, testing, and using this code. | |
7 | |
8 History: | |
9 Date Who What | |
10 24Sep95 dl@cs.oswego.edu Create from collections.d working file | |
11 | |
12 */ | |
13 | |
14 | |
15 module tango.util.collection.model.SeqView; | |
16 | |
17 private import tango.util.collection.model.View; | |
18 | |
19 | |
20 /** | |
21 * | |
22 * | |
23 * Seqs are indexed, sequentially ordered collections. | |
24 * Indices are always in the range 0 .. size() -1. All accesses by index | |
25 * are checked, raising exceptions if the index falls out of range. | |
26 * <P> | |
27 * The elements() enumeration for all seqs is guaranteed to be | |
28 * traversed (via nextElement) in sequential order. | |
29 * | |
30 author: Doug Lea | |
31 * @version 0.93 | |
32 * | |
33 * <P> For an introduction to this package see <A HREF="index.html"> Overview </A>. | |
34 **/ | |
35 | |
36 public interface SeqView(T) : View!(T) | |
37 { | |
38 /** | |
39 * Return the element at the indicated index | |
40 * @param index | |
41 * Returns: the element at the index | |
42 * Throws: NoSuchElementException if index is not in range 0..size()-1 | |
43 **/ | |
44 | |
45 public T get(int index); | |
46 public alias get opIndex; | |
47 | |
48 | |
49 /** | |
50 * Return the first element, if it exists. | |
51 * Behaviorally equivalent to at(0) | |
52 * Throws: NoSuchElementException if isEmpty | |
53 **/ | |
54 | |
55 public T head(); | |
56 | |
57 | |
58 /** | |
59 * Return the last element, if it exists. | |
60 * Behaviorally equivalent to at(size()-1) | |
61 * Throws: NoSuchElementException if isEmpty | |
62 **/ | |
63 | |
64 public T tail(); | |
65 | |
66 | |
67 /** | |
68 * Report the index of leftmost occurrence of an element from a | |
69 * given starting point, or -1 if there is no such index. | |
70 * @param element the element to look for | |
71 * @param startingIndex the index to start looking from. The startingIndex | |
72 * need not be a valid index. If less than zero it is treated as 0. | |
73 * If greater than or equal to size(), the result will always be -1. | |
74 * Returns: index such that | |
75 * <PRE> | |
76 * let int si = max(0, startingIndex) in | |
77 * index == -1 && | |
78 * foreach (int i in si .. size()-1) !at(index).equals(element) | |
79 * || | |
80 * at(index).equals(element) && | |
81 * foreach (int i in si .. index-1) !at(index).equals(element) | |
82 * </PRE> | |
83 **/ | |
84 | |
85 public int first(T element, int startingIndex = 0); | |
86 | |
87 /** | |
88 * Report the index of righttmost occurrence of an element from a | |
89 * given starting point, or -1 if there is no such index. | |
90 * @param element the element to look for | |
91 * @param startingIndex the index to start looking from. The startingIndex | |
92 * need not be a valid index. If less than zero the result | |
93 * will always be -1. | |
94 * If greater than or equal to size(), it is treated as size()-1. | |
95 * Returns: index such that | |
96 * <PRE> | |
97 * let int si = min(size()-1, startingIndex) in | |
98 * index == -1 && | |
99 * foreach (int i in 0 .. si) !at(index).equals(element) | |
100 * || | |
101 * at(index).equals(element) && | |
102 * foreach (int i in index+1 .. si) !at(index).equals(element) | |
103 * </PRE> | |
104 * | |
105 **/ | |
106 public int last(T element, int startingIndex = 0); | |
107 | |
108 | |
109 /** | |
110 * Construct a new SeqView that is a clone of self except | |
111 * that it does not contain the elements before index or | |
112 * after index+length. If length is less than or equal to zero, | |
113 * return an empty SeqView. | |
114 * @param index of the element that will be the 0th index in new SeqView | |
115 * @param length the number of elements in the new SeqView | |
116 * Returns: new seq such that | |
117 * <PRE> | |
118 * s.size() == max(0, length) && | |
119 * foreach (int i in 0 .. s.size()-1) s.at(i).equals(at(i+index)); | |
120 * </PRE> | |
121 * Throws: NoSuchElementException if index is not in range 0..size()-1 | |
122 **/ | |
123 public SeqView subset(int index, int length); | |
124 | |
125 /** | |
126 * Construct a new SeqView that is a clone of self except | |
127 * that it does not contain the elements before begin or | |
128 * after end-1. If length is less than or equal to zero, | |
129 * return an empty SeqView. | |
130 * @param index of the element that will be the 0th index in new SeqView | |
131 * @param index of the last element in the SeqView plus 1 | |
132 * Returns: new seq such that | |
133 * <PRE> | |
134 * s.size() == max(0, length) && | |
135 * foreach (int i in 0 .. s.size()-1) s.at(i).equals(at(i+index)); | |
136 * </PRE> | |
137 * Throws: NoSuchElementException if index is not in range 0..size()-1 | |
138 **/ | |
139 public SeqView opSlice(int begin, int end); | |
140 | |
141 | |
142 version (VERBOSE) | |
143 { | |
144 /** | |
145 * Construct a new SeqView that is a clone of self except | |
146 * that it adds (inserts) the indicated element at the | |
147 * indicated index. | |
148 * @param index the index at which the new element will be placed | |
149 * @param element The element to insert in the new collection | |
150 * Returns: new seq s, such that | |
151 * <PRE> | |
152 * s.at(index) == element && | |
153 * foreach (int i in 1 .. s.size()-1) s.at(i).equals(at(i-1)); | |
154 * </PRE> | |
155 * Throws: NoSuchElementException if index is not in range 0..size()-1 | |
156 **/ | |
157 | |
158 public SeqView insertingAt(int index, T element); | |
159 | |
160 | |
161 /** | |
162 * Construct a new SeqView that is a clone of self except | |
163 * that the indicated element is placed at the indicated index. | |
164 * @param index the index at which to replace the element | |
165 * @param element The new value of at(index) | |
166 * Returns: new seq, s, such that | |
167 * <PRE> | |
168 * s.at(index) == element && | |
169 * foreach (int i in 0 .. s.size()-1) | |
170 * (i != index) --> s.at(i).equals(at(i)); | |
171 * </PRE> | |
172 * Throws: NoSuchElementException if index is not in range 0..size()-1 | |
173 **/ | |
174 | |
175 public SeqView replacingAt(int index, T element); | |
176 | |
177 | |
178 /** | |
179 * Construct a new SeqView that is a clone of self except | |
180 * that it does not contain the element at the indeicated index; all | |
181 * elements to its right are slided left by one. | |
182 * | |
183 * @param index the index at which to remove an element | |
184 * Returns: new seq such that | |
185 * <PRE> | |
186 * foreach (int i in 0.. index-1) s.at(i).equals(at(i)); && | |
187 * foreach (int i in index .. s.size()-1) s.at(i).equals(at(i+1)); | |
188 * </PRE> | |
189 * Throws: NoSuchElementException if index is not in range 0..size()-1 | |
190 **/ | |
191 public SeqView removingAt(int index); | |
192 } // version | |
193 } | |
194 |