@@ -19,12 +19,14 @@ record dict : serializable {
1919 this .order = order;
2020 }
2121
22- proc init (table: map(?keyType,?valType)) {
22+ proc init (in table: map(?keyType,?valType)) {
2323 var ks = new list(keyType);
24- var tbl: map(keyType,valType) = table ;
25- for k in tbl .keys() do
24+ var tbl = new map(keyType,valType);
25+ for k in table .keys() {
2626 ks.pushBack(k);
27- this .init(tbl,ks);
27+ tbl.addOrReplace(k,table[ k] );
28+ }
29+ this .init(table,ks);
2830 }
2931
3032 proc init (type keyType, type valType) {
@@ -59,18 +61,111 @@ record dict : serializable {
5961 return table[ key] ;
6062 }
6163
62- iter keys(): keyType do
63- for i in 0 ..< order.size do
64- yield order[ i] ;
6564
66- iter values(): valType do
67- for k in keys() do
68- yield table[ k] ;
65+ proc ref getKey (i: int ) ref do
66+ return order[ i] ;
67+
68+ proc const ref getKey (i: int ) const ref do
69+ return order[ i] ;
70+
71+ iter keys() do
72+ for i in 0 ..< this .size do
73+ yield this .getKey(i);
74+
75+ proc ref getNVal (i: int ) ref throws {
76+ return table[ order[ i]] ;
77+ }
78+
79+ proc const ref getNVal (i: int ) const ref throws {
80+ return table[ order[ i]] ;
81+ }
82+
83+ iter ref values() ref do
84+ for i in 0 ..< this .size do
85+ yield this .getNVal(i);
86+
87+ iter const ref values() const ref do
88+ for i in 0 ..< this .size do
89+ yield this .getNVal(i);
90+
91+ // iter values() do
92+ // for i in 0..<this.size do
93+ // yield this.getVal(i);
94+
95+ proc ref this (k: keyType) ref throws {
96+ if !table.contains(k) then
97+ throw new Error(" Key not found: " + k: string );
98+ return table[ k] ;
99+ }
100+
101+ // iter values() ref : valType do
102+ // for k in keys() do
103+ // yield table[k];
104+
105+
106+
107+
108+ // iter these() {
109+ // for (k,v) in zip(this.keys(),this.values()) {
110+ // yield (k,v);
111+ // }
112+ // }
113+
114+
115+ // iter these() ref where !isClassType(valType) {
116+ // for k in order {
117+ // ref v = table[k];
118+ // yield (k,v);
119+ // }
120+ // }
121+
122+ // iter these() const ref where !isClassType(valType) do
123+
124+ // for k in order {
125+ // const ref v = table[k];
126+ // yield (k,v);
127+ // }
128+
129+ // iter these() where !isClassType(valType) do
130+ // for k in order {
131+ // yield (k,table[k]);
132+ // }
133+
134+ // iter these() where isSharedClassType(valType) {
135+ // for k in order {
136+ // yield (k,table[k]);
137+ // }
138+ // }
139+
140+ // // iter these() where isClassType(valType) {
141+ // // compilerError(valType:string);
142+ // // for k in order {
143+ // // yield (k,table[k]);
144+ // // }
145+ // // }
146+
147+ // iter these() where isClassType(valType) && !isSharedClassType(valType) {
148+ // compilerError(valType:string);
149+ // for k in order {
150+ // yield (k,table[k]);
151+ // }
152+ // }
153+
154+ // // iter these() ref {
155+ // // for k in order {
156+ // // ref v = table[k];
157+ // // yield (k,v);
158+ // // }
159+ // // }
160+
161+
162+ // // iter these() const ref {
163+ // // for k in order {
164+ // // const ref v = table[k];
165+ // // yield (k,v);
166+ // // }
167+ // // }
69168
70- iter these () do
71- for k in order {
72- yield (k,table[ k] );
73- }
74169
75170 proc ref insert (in key: keyType, in value: valType) {
76171 if !order.contains(key) then
0 commit comments