Mercurial > projects > ldc
comparison tango/tango/util/collection/impl/LLPair.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: LLPair.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 tango.util.collection.d working file | |
11 | |
12 */ | |
13 | |
14 | |
15 module tango.util.collection.impl.LLPair; | |
16 | |
17 private import tango.util.collection.impl.LLCell; | |
18 | |
19 private import tango.util.collection.model.Iterator; | |
20 | |
21 | |
22 /** | |
23 * | |
24 * | |
25 * LLPairs are LLCells with keys, and operations that deal with them. | |
26 * As with LLCells, the are pure implementation tools. | |
27 * | |
28 author: Doug Lea | |
29 * @version 0.93 | |
30 * | |
31 * <P> For an introduction to this package see <A HREF="index.html"> Overview </A>. | |
32 **/ | |
33 | |
34 public class LLPair(K, T) : LLCell!(T) | |
35 { | |
36 alias LLCell!(T).find find; | |
37 alias LLCell!(T).count count; | |
38 alias LLCell!(T).element element; | |
39 | |
40 | |
41 // instance variables | |
42 | |
43 private K key_; | |
44 | |
45 /** | |
46 * Make a cell with given key, elment, and next link | |
47 **/ | |
48 | |
49 public this (K k, T v, LLPair n) | |
50 { | |
51 super(v, n); | |
52 key_ = k; | |
53 } | |
54 | |
55 /** | |
56 * Make a pair with given key and element, and null next link | |
57 **/ | |
58 | |
59 public this (K k, T v) | |
60 { | |
61 super(v, null); | |
62 key_ = k; | |
63 } | |
64 | |
65 /** | |
66 * Make a pair with null key, elment, and next link | |
67 **/ | |
68 | |
69 public this () | |
70 { | |
71 super(T.init, null); | |
72 key_ = K.init; | |
73 } | |
74 | |
75 /** | |
76 * return the key | |
77 **/ | |
78 | |
79 public final K key() | |
80 { | |
81 return key_; | |
82 } | |
83 | |
84 /** | |
85 * set the key | |
86 **/ | |
87 | |
88 public final void key(K k) | |
89 { | |
90 key_ = k; | |
91 } | |
92 | |
93 | |
94 /** | |
95 * set the key | |
96 **/ | |
97 | |
98 public final int keyHash() | |
99 { | |
100 return typeid(K).getHash(&key_); | |
101 } | |
102 | |
103 | |
104 /** | |
105 * return a cell with key() key or null if no such | |
106 **/ | |
107 | |
108 public final LLPair findKey(K key) | |
109 { | |
110 for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) | |
111 if (p.key() == key) | |
112 return p; | |
113 return null; | |
114 } | |
115 | |
116 /** | |
117 * return a cell holding the indicated pair or null if no such | |
118 **/ | |
119 | |
120 public final LLPair find(K key, T element) | |
121 { | |
122 for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) | |
123 if (p.key() == key && p.element() == element) | |
124 return p; | |
125 return null; | |
126 } | |
127 | |
128 /** | |
129 * Return the number of cells traversed to find a cell with key() key, | |
130 * or -1 if not present | |
131 **/ | |
132 | |
133 public final int indexKey(K key) | |
134 { | |
135 int i = 0; | |
136 for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) | |
137 { | |
138 if (p.key() == key) | |
139 return i; | |
140 else | |
141 ++i; | |
142 } | |
143 return -1; | |
144 } | |
145 | |
146 /** | |
147 * Return the number of cells traversed to find a cell with indicated pair | |
148 * or -1 if not present | |
149 **/ | |
150 public final int index(K key, T element) | |
151 { | |
152 int i = 0; | |
153 for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) | |
154 { | |
155 if (p.key() == key && p.element() == element) | |
156 return i; | |
157 else | |
158 ++i; | |
159 } | |
160 return -1; | |
161 } | |
162 | |
163 /** | |
164 * Return the number of cells with key() key. | |
165 **/ | |
166 public final int countKey(K key) | |
167 { | |
168 int c = 0; | |
169 for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) | |
170 if (p.key() == key) | |
171 ++c; | |
172 return c; | |
173 } | |
174 | |
175 /** | |
176 * Return the number of cells with indicated pair | |
177 **/ | |
178 public final int count(K key, T element) | |
179 { | |
180 int c = 0; | |
181 for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) | |
182 if (p.key() == key && p.element() == element) | |
183 ++c; | |
184 return c; | |
185 } | |
186 | |
187 protected final LLPair duplicate() | |
188 { | |
189 return new LLPair(key(), element(), cast(LLPair)cast(void*)(next())); | |
190 } | |
191 } |