comparison tango/example/manual/chapterStorage.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 module example.reference.chapter11;
2
3 import tango.util.collection.HashMap;
4 import tango.util.collection.ArrayBag;
5 import tango.util.collection.LinkSeq;
6 import tango.util.collection.CircularSeq;
7 import tango.util.collection.ArraySeq;
8 import tango.util.collection.TreeBag;
9 import tango.util.collection.iterator.FilteringIterator;
10 import tango.util.collection.iterator.InterleavingIterator;
11
12 import tango.io.Stdout;
13 import tango.core.Exception;
14
15 import tango.util.collection.model.Comparator;
16 import tango.util.collection.impl.BagCollection;
17 import tango.util.collection.impl.SeqCollection;
18 import Ascii = tango.text.Ascii;
19
20 void linkedListExample(){
21 Stdout.format( "linkedListExample" ).newline;
22 alias LinkSeq!(char[]) StrList;
23 StrList lst = new StrList();
24
25 lst.append( "value1" );
26 lst.append( "value2" );
27 lst.append( "value3" );
28
29 auto it = lst.elements();
30 // The call to .more gives true, if there are more elements
31 // and switches the iterator to the next one if available.
32 while( it.more ){
33 char[] item_value = it.get;
34 Stdout.format( "Value:{0}", item_value ).newline;
35 }
36 }
37
38 void hashMapExample(){
39 Stdout.format( "hashMapExample" ).newline;
40 alias HashMap!(char[], char[]) StrStrMap;
41 StrStrMap map = new StrStrMap();
42 map.add( "key1", "value1" );
43 char[] key = "key1";
44 Stdout.format( "Key: {0}, Value:{1}", key, map.get( key )).newline;
45
46
47 auto it = map.keys();
48 // The call to .more gives true, if there are more elements
49 // and switches the iterator to the next one if available.
50 while( it.more ){
51 char[] item_key = void;
52 char[] item_value = it.get( item_key ); // only for maps, the key is returns via inout
53 Stdout.format( "Key: {0}, Value:{1}", item_key, item_value ).newline;
54 }
55 }
56
57 void testComparator(){
58 char[][] result;
59
60 // Create and fill the containers
61 auto nameSet = new TreeBag!(char[])( null, new class() Comparator!(char[]){
62 int compare( char[] first, char[] second ){
63 return Ascii.icompare( first, second );
64 }
65 });
66
67 nameSet.addIf( "Alice" );
68 nameSet.addIf( "Bob" );
69 nameSet.addIf( "aliCe" );
70
71 // use foreach to iterate over the container
72 foreach ( char[] i; nameSet )
73 result ~= i;
74 foreach( char[] i; result ) Stdout.format( "{0} ", i );
75 Stdout.newline;
76
77 // test the result
78 assert( result == [ "Alice", "Bob" ], "testIterator" );
79 }
80
81 void testSreener(){
82 int[] result;
83
84 // Create and fill the containers
85 auto ratioSamples = new ArraySeq!(float)( (float v){
86 return v >= 0.0f && v < 1.0f;
87 });
88
89 ratioSamples.append( 0.0f );
90 ratioSamples.append( 0.5f );
91 ratioSamples.append( 0.99999f );
92 // try to insert a value that is not allowed
93 try{
94 ratioSamples.append( 1.0f );
95 // will never get here
96 assert( false );
97 } catch( IllegalElementException e ){
98 }
99 }
100
101
102 void testForeach(){
103 int[] result;
104
105 // Create and fill the containers
106 auto l1 = new CircularSeq!(int);
107 for( int i = 0; i < 6; i+=2 ){
108 l1.append( i );
109 }
110
111 // use foreach to iterate over the container
112 foreach ( int i; l1 )
113 result ~= i;
114 // foreach_reverse ( int i; l1 )
115 // result ~= i;
116
117 // test the result
118 assert( result == [ 0, 2, 4 ], "testIterator" );
119 }
120
121 void testIterator(){
122 int[] result;
123
124 // Create and fill the containers
125 auto l1 = new LinkSeq!(int);
126 for( int i = 0; i < 6; i+=2 ){
127 l1.append( i );
128 }
129
130 // define the Iterator
131 auto it = l1.elements();
132
133 // use the Iterator to iterate over the container
134 while (it.more())
135 result ~= it.get();
136
137 // test the result
138 assert( result == [ 0, 2, 4 ], "testIterator" );
139 }
140
141 void testFilteringIterator(){
142 int[] result;
143 alias ArrayBag!(int) IntBag;
144
145 // Create and fill the container
146 auto ib = new IntBag;
147 for( int i = 0; i < 20; i++ ){
148 ib.add( i );
149 }
150
151 // define the FilteringIterator with a function literal
152 auto it = new FilteringIterator!(int)( ib.elements(), (int i){
153 return i >= 3 && i < 7;
154 });
155
156 // use the Iterator with the more()/get() pattern
157 while (it.more())
158 result ~= it.get();
159
160 // test the result
161 assert( result == [ 3, 4, 5, 6 ], "testFilteringIterator" );
162
163 }
164
165 void testFilteringIteratorRemove(){
166 int[] result;
167
168 // Create and fill the container
169 auto container = new LinkSeq!(int);
170 for( int i = 0; i < 10; i++ ){
171 container.append( i );
172 }
173
174 // 1. Build a list of elements to delete
175 auto dellist = new LinkSeq!(int);
176 foreach( int i; container ){
177 if( i < 3 || i >= 7 ){
178 // container.remove( i ); /* NOT POSSIBLE */
179 dellist.append( i );
180 }
181 }
182 // 2. Iterate over this deletion list and
183 // delete the items in the original container.
184 foreach( int i; dellist ){
185 container.remove( i );
186 }
187
188 foreach ( int i; container )
189 result ~= i;
190
191 // test the result
192 assert( result == [ 3, 4, 5, 6 ], "testFilteringIterator" );
193
194 }
195
196 void testInterleavingIterator(){
197 int[] result;
198
199 // Create and fill the containers
200 auto l1 = new LinkSeq!(int);
201 auto l2 = new ArraySeq!(int);
202 for( int i = 0; i < 6; i+=2 ){
203 l1.append( i );
204 l2.append( i+1 );
205 }
206
207 // define the InterleavingIterator
208 auto it = new InterleavingIterator!(int)( l1.elements(), l2.elements() );
209
210 // use the InterleavingIterator to iterate over the container
211 while (it.more())
212 result ~= it.get();
213
214 // test the result
215 assert( result == [ 0, 1, 2, 3, 4, 5 ], "testInterleavingIterator" );
216 }
217
218 // foreach( int i; result ) Stdout.format( "{0} ", i );
219 // Stdout.newline;
220
221 void main(){
222 Stdout.format( "reference - Chapter 11 Example" ).newline;
223 hashMapExample();
224 linkedListExample();
225
226 testSreener();
227 testComparator();
228 testForeach();
229 testIterator();
230 testFilteringIterator();
231 testInterleavingIterator();
232 testFilteringIteratorRemove();
233
234 Stdout.format( "=== End ===" ).newline;
235 }
236
237