5
5
6
6
namespace LightningDB
7
7
{
8
- /// <summary>
9
- /// Extensions for LightningCursor's Move* methods
10
- /// </summary>
11
8
public static class LightningCursorMoveExtensions
12
9
{
13
10
private static CursorGetByOperation CursorMoveBy ( LightningCursor cur , Func < KeyValuePair < byte [ ] , byte [ ] > ? > mover )
14
11
{
15
12
return new CursorGetByOperation ( cur , mover . Invoke ( ) ) ;
16
13
}
17
14
15
+ private static GetByOperation CursorMoveValueBy ( LightningCursor cur , Func < byte [ ] > mover )
16
+ {
17
+ return new GetByOperation ( cur . Database , mover . Invoke ( ) ) ;
18
+ }
19
+
18
20
private static bool CursorMove < TKey , TValue > ( LightningCursor cur , Func < KeyValuePair < byte [ ] , byte [ ] > ? > mover , out KeyValuePair < TKey , TValue > pair )
19
21
{
20
22
var op = CursorMoveBy ( cur , mover ) ;
@@ -31,206 +33,131 @@ private static bool CursorMove<TKey, TValue>(LightningCursor cur, Func<KeyValueP
31
33
}
32
34
}
33
35
34
- /// <summary>
35
- /// Position at first key/data item
36
- /// </summary>
37
- /// <returns>First key/data item</returns>
36
+ private static bool CursorMoveValue < TValue > ( LightningCursor cur , Func < byte [ ] > mover , out TValue value )
37
+ {
38
+ var op = CursorMoveValueBy ( cur , mover ) ;
39
+
40
+ if ( op == null )
41
+ {
42
+ value = default ( TValue ) ;
43
+ return false ;
44
+ }
45
+ else
46
+ {
47
+ value = op . Value < TValue > ( ) ;
48
+ return true ;
49
+ }
50
+ }
51
+
38
52
public static CursorGetByOperation MoveToFirstBy ( this LightningCursor cur )
39
53
{
40
54
return CursorMoveBy ( cur , cur . MoveToFirst ) ;
41
55
}
42
56
43
- /// <summary>
44
- /// Position at first key/data item
45
- /// </summary>
46
- /// <returns>First key/data item</returns>
47
57
public static bool MoveToFirst < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
48
58
{
49
59
return CursorMove < TKey , TValue > ( cur , cur . MoveToFirst , out pair ) ;
50
60
}
51
-
52
- /// <summary>
53
- /// Position at first data item of current key. Only for MDB_DUPSORT
54
- /// </summary>
55
- /// <returns>First data item of current key. Only for MDB_DUPSORT</returns>
56
- public static CursorGetByOperation MoveToFirstDuplicateBy ( this LightningCursor cur )
57
- {
58
- return CursorMoveBy ( cur , cur . MoveToFirstDuplicate ) ;
59
- }
60
-
61
- /// <summary>
62
- /// Position at first data item of current key. Only for MDB_DUPSORT
63
- /// </summary>
64
- /// <returns>First data item of current key. Only for MDB_DUPSORT</returns>
65
- public static bool MoveToFirstDuplicate < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
66
- {
67
- return CursorMove < TKey , TValue > ( cur , cur . MoveToFirstDuplicate , out pair ) ;
68
- }
69
-
70
- /// <summary>
71
- /// Position at last key/data item
72
- /// </summary>
73
- /// <returns>Last key/data item</returns>
61
+
74
62
public static CursorGetByOperation MoveToLastBy ( this LightningCursor cur )
75
63
{
76
64
return CursorMoveBy ( cur , cur . MoveToLast ) ;
77
65
}
78
66
79
- /// <summary>
80
- /// Position at last key/data item
81
- /// </summary>
82
- /// <returns>Last key/data item</returns>
83
67
public static bool MoveToLast < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
84
68
{
85
69
return CursorMove < TKey , TValue > ( cur , cur . MoveToLast , out pair ) ;
86
70
}
87
-
88
- /// <summary>
89
- /// Position at last data item of current key. Only for MDB_DUPSORT
90
- /// </summary>
91
- /// <returns>Last data item of current key</returns>
92
- public static CursorGetByOperation MoveToLastDuplicateBy ( this LightningCursor cur )
93
- {
94
- return CursorMoveBy ( cur , cur . MoveToLastDuplicate ) ;
95
- }
96
-
97
- /// <summary>
98
- /// Position at last data item of current key. Only for MDB_DUPSORT
99
- /// </summary>
100
- /// <returns>Last data item of current key</returns>
101
- public static bool MoveToLastDuplicate < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
102
- {
103
- return CursorMove < TKey , TValue > ( cur , cur . MoveToLastDuplicate , out pair ) ;
104
- }
105
-
106
- /// <summary>
107
- /// Return key/data at current cursor position
108
- /// </summary>
109
- /// <returns>Key/data at current cursor position</returns>
71
+
110
72
public static CursorGetByOperation GetCurrentBy ( this LightningCursor cur )
111
73
{
112
74
return CursorMoveBy ( cur , cur . GetCurrent ) ;
113
75
}
114
76
115
- /// <summary>
116
- /// Return key/data at current cursor position
117
- /// </summary>
118
- /// <returns>Key/data at current cursor position</returns>
119
77
public static bool GetCurrent < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
120
78
{
121
79
return CursorMove < TKey , TValue > ( cur , cur . GetCurrent , out pair ) ;
122
80
}
123
-
124
- /// <summary>
125
- /// Position at next data item
126
- /// </summary>
127
- /// <returns>Next data item</returns>
81
+
128
82
public static CursorGetByOperation MoveNextBy ( this LightningCursor cur )
129
83
{
130
84
return CursorMoveBy ( cur , cur . MoveNext ) ;
131
85
}
132
86
133
- /// <summary>
134
- /// Position at next data item
135
- /// </summary>
136
- /// <returns>Next data item</returns>
137
87
public static bool MoveNext < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
138
88
{
139
89
return CursorMove < TKey , TValue > ( cur , cur . MoveNext , out pair ) ;
140
90
}
141
-
142
- /// <summary>
143
- /// Position at next data item of current key. Only for MDB_DUPSORT
144
- /// </summary>
145
- /// <returns>Next data item of current key</returns>
91
+
146
92
public static CursorGetByOperation MoveNextDuplicateBy ( this LightningCursor cur )
147
93
{
148
94
return CursorMoveBy ( cur , cur . MoveNextDuplicate ) ;
149
95
}
150
96
151
- /// <summary>
152
- /// Position at next data item of current key. Only for MDB_DUPSORT
153
- /// </summary>
154
- /// <returns>Next data item of current key</returns>
155
97
public static bool MoveNextDuplicate < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
156
98
{
157
99
return CursorMove < TKey , TValue > ( cur , cur . MoveNextDuplicate , out pair ) ;
158
100
}
159
-
160
- /// <summary>
161
- /// Position at first data item of next key. Only for MDB_DUPSORT.
162
- /// </summary>
163
- /// <returns>
164
- /// First data item of next key.
165
- /// </returns>
101
+
166
102
public static CursorGetByOperation MoveNextNoDuplicateBy ( this LightningCursor cur )
167
103
{
168
104
return CursorMoveBy ( cur , cur . MoveNextNoDuplicate ) ;
169
105
}
170
106
171
- /// <summary>
172
- /// Position at first data item of next key. Only for MDB_DUPSORT.
173
- /// </summary>
174
- /// <returns>
175
- /// First data item of next key.
176
- /// </returns>
177
107
public static bool MoveNextNoDuplicate < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
178
108
{
179
109
return CursorMove < TKey , TValue > ( cur , cur . MoveNextNoDuplicate , out pair ) ;
180
110
}
181
-
182
- /// <summary>
183
- /// Position at previous data item.
184
- /// </summary>
185
- /// <returns>Previous data item.</returns>
111
+
186
112
public static CursorGetByOperation MovePrevBy ( this LightningCursor cur )
187
113
{
188
114
return CursorMoveBy ( cur , cur . MovePrev ) ;
189
115
}
190
116
191
- /// <summary>
192
- /// Position at previous data item.
193
- /// </summary>
194
- /// <returns>Previous data item.</returns>
195
117
public static bool MovePrev < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
196
118
{
197
119
return CursorMove < TKey , TValue > ( cur , cur . MovePrev , out pair ) ;
198
120
}
199
-
200
- /// <summary>
201
- /// Position at previous data item of current key. Only for MDB_DUPSORT.
202
- /// </summary>
203
- /// <returns>Previous data item of current key.</returns>
121
+
204
122
public static CursorGetByOperation MovePrevDuplicateBy ( this LightningCursor cur )
205
123
{
206
124
return CursorMoveBy ( cur , cur . MovePrevDuplicate ) ;
207
125
}
208
126
209
- /// <summary>
210
- /// Position at previous data item of current key. Only for MDB_DUPSORT.
211
- /// </summary>
212
- /// <returns>Previous data item of current key.</returns>
213
127
public static bool MovePrevDuplicate < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
214
128
{
215
129
return CursorMove < TKey , TValue > ( cur , cur . MovePrevDuplicate , out pair ) ;
216
130
}
217
-
218
- /// <summary>
219
- /// Position at last data item of previous key. Only for MDB_DUPSORT.
220
- /// </summary>
221
- /// <returns>Previous data item of current key.</returns>
131
+
222
132
public static CursorGetByOperation MovePrevNoDuplicateBy ( this LightningCursor cur )
223
133
{
224
134
return CursorMoveBy ( cur , cur . MovePrevNoDuplicate ) ;
225
135
}
226
136
227
- /// <summary>
228
- /// Position at last data item of previous key. Only for MDB_DUPSORT.
229
- /// </summary>
230
- /// <returns>Previous data item of current key.</returns>
231
137
public static bool MovePrevNoDuplicate < TKey , TValue > ( this LightningCursor cur , out KeyValuePair < TKey , TValue > pair )
232
138
{
233
139
return CursorMove < TKey , TValue > ( cur , cur . MovePrevNoDuplicate , out pair ) ;
234
140
}
141
+
142
+ public static GetByOperation MoveToFirstDuplicateBy ( this LightningCursor cur )
143
+ {
144
+ return CursorMoveValueBy ( cur , cur . MoveToFirstDuplicate ) ;
145
+ }
146
+
147
+ public static bool MoveToFirstDuplicate < TValue > ( this LightningCursor cur , out TValue value )
148
+ {
149
+ return CursorMoveValue < TValue > ( cur , cur . MoveToFirstDuplicate , out value ) ;
150
+ }
151
+
152
+ public static GetByOperation MoveToLastDuplicateBy ( this LightningCursor cur )
153
+ {
154
+ return CursorMoveValueBy ( cur , cur . MoveToLastDuplicate ) ;
155
+ }
156
+
157
+ public static bool MoveToLastDuplicate < TValue > ( this LightningCursor cur , out TValue value )
158
+ {
159
+ return CursorMoveValue < TValue > ( cur , cur . MoveToLastDuplicate , out value ) ;
160
+ }
161
+
235
162
}
236
163
}
0 commit comments