Skip to content

Commit eb00e3c

Browse files
committed
Refactor Tuple Key/Value encoders
1 parent c3ae903 commit eb00e3c

File tree

7 files changed

+760
-677
lines changed

7 files changed

+760
-677
lines changed

FoundationDB.Client/Shared/TypeSystem/Encoders/ICompositeKeyEncoder.cs

Lines changed: 0 additions & 217 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
2929
namespace Doxense.Serialization.Encoders
3030
{
3131
using System;
32-
using Doxense.Collections.Tuples;
3332
using Doxense.Memory;
3433

3534
public interface ICompositeKeyEncoder<T1, T2> : IKeyEncoder<(T1, T2)>
@@ -76,220 +75,4 @@ public interface ICompositeKeyEncoder<T1, T2, T3, T4, T5, T6> : IKeyEncoder<(T1,
7675
/// <summary>Read some or all parts of a composite key</summary>
7776
void ReadKeyPartsFrom(ref SliceReader reader, int count, out (T1, T2, T3, T4, T5, T6) items);
7877
}
79-
80-
public static partial class KeyEncoderExtensions
81-
{
82-
83-
#region <T1, T2>
84-
85-
public static void WriteKeyTo<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, ref SliceWriter writer, T1 value1, T2 value2)
86-
{
87-
var tuple = (value1, value2);
88-
encoder.WriteKeyPartsTo(ref writer, 2, ref tuple);
89-
}
90-
91-
public static Slice EncodeKey<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, T1 item1, T2 item2)
92-
{
93-
var writer = default(SliceWriter);
94-
var tuple = (item1, item2);
95-
encoder.WriteKeyPartsTo(ref writer, 2, ref tuple);
96-
return writer.ToSlice();
97-
}
98-
99-
public static Slice EncodeKey<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, Slice prefix, T1 item1, T2 item2)
100-
{
101-
var writer = new SliceWriter(prefix.Count + 24);
102-
writer.WriteBytes(prefix);
103-
encoder.WriteKeyTo(ref writer, item1, item2);
104-
return writer.ToSlice();
105-
}
106-
107-
public static Slice EncodePartialKey<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, T1 item1)
108-
{
109-
var writer = default(SliceWriter);
110-
var tuple = (item1, default(T2));
111-
encoder.WriteKeyPartsTo(ref writer, 1, ref tuple);
112-
return writer.ToSlice();
113-
}
114-
115-
public static Slice EncodePartialKey<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, Slice prefix, T1 item1)
116-
{
117-
var writer = new SliceWriter(prefix.Count + 16);
118-
writer.WriteBytes(prefix);
119-
var tuple = (item1, default(T2));
120-
encoder.WriteKeyPartsTo(ref writer, 1, ref tuple);
121-
return writer.ToSlice();
122-
}
123-
124-
public static Slice EncodeKeyParts<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, int count, (T1, T2) items)
125-
{
126-
var writer = default(SliceWriter);
127-
encoder.WriteKeyPartsTo(ref writer, count, ref items);
128-
return writer.ToSlice();
129-
}
130-
131-
public static STuple<T1, T2> DecodeKey<T1, T2>(this ICompositeKeyEncoder<T1, T2> decoder, Slice encoded)
132-
{
133-
var reader = new SliceReader(encoded);
134-
decoder.ReadKeyFrom(ref reader, out var items);
135-
//TODO: throw if extra bytes?
136-
return items;
137-
}
138-
139-
public static STuple<T1, T2> DecodeKeyParts<T1, T2>(this ICompositeKeyEncoder<T1, T2> encoder, int count, Slice encoded)
140-
{
141-
var reader = new SliceReader(encoded);
142-
encoder.ReadKeyPartsFrom(ref reader, count, out var items);
143-
return items;
144-
}
145-
146-
#endregion
147-
148-
#region <T1, T2, T3>
149-
150-
public static void WriteKeyTo<T1, T2, T3>(this ICompositeKeyEncoder<T1, T2, T3> encoder, ref SliceWriter writer, T1 value1, T2 value2, T3 value3)
151-
{
152-
var tuple = (value1, value2, value3);
153-
encoder.WriteKeyPartsTo(ref writer, 3, ref tuple);
154-
}
155-
156-
public static Slice EncodeKey<T1, T2, T3>(this ICompositeKeyEncoder<T1, T2, T3> encoder, T1 item1, T2 item2, T3 item3)
157-
{
158-
var writer = default(SliceWriter);
159-
var tuple = (item1, item2, item3);
160-
encoder.WriteKeyPartsTo(ref writer, 3, ref tuple);
161-
return writer.ToSlice();
162-
}
163-
164-
public static Slice EncodeKey<T1, T2, T3>(this ICompositeKeyEncoder<T1, T2, T3> encoder, Slice prefix, T1 item1, T2 item2, T3 item3)
165-
{
166-
var writer = new SliceWriter(prefix.Count + 32);
167-
writer.WriteBytes(prefix);
168-
encoder.WriteKeyTo(ref writer, item1, item2, item3);
169-
return writer.ToSlice();
170-
}
171-
172-
public static Slice EncodeKeyParts<T1, T2, T3>(this ICompositeKeyEncoder<T1, T2, T3> encoder, int count, (T1, T2, T3) items)
173-
{
174-
var writer = default(SliceWriter);
175-
encoder.WriteKeyPartsTo(ref writer, count, ref items);
176-
return writer.ToSlice();
177-
}
178-
179-
public static STuple<T1, T2, T3> DecodeKey<T1, T2, T3>(this ICompositeKeyEncoder<T1, T2, T3> decoder, Slice encoded)
180-
{
181-
var reader = new SliceReader(encoded);
182-
decoder.ReadKeyFrom(ref reader, out var items);
183-
//TODO: throw if extra bytes?
184-
return items;
185-
}
186-
187-
public static STuple<T1, T2, T3> DecodeKeyParts<T1, T2, T3>(this ICompositeKeyEncoder<T1, T2, T3> encoder, int count, Slice encoded)
188-
{
189-
var reader = new SliceReader(encoded);
190-
encoder.ReadKeyPartsFrom(ref reader, count, out var items);
191-
return items;
192-
}
193-
194-
#endregion
195-
196-
#region <T1, T2, T3, T4>
197-
198-
public static void WriteKeyTo<T1, T2, T3, T4>(this ICompositeKeyEncoder<T1, T2, T3, T4> encoder, ref SliceWriter writer, T1 value1, T2 value2, T3 value3, T4 value4)
199-
{
200-
var tuple = (value1, value2, value3, value4);
201-
encoder.WriteKeyPartsTo(ref writer, 4, ref tuple);
202-
}
203-
204-
public static Slice EncodeKey<T1, T2, T3, T4>(this ICompositeKeyEncoder<T1, T2, T3, T4> encoder, T1 item1, T2 item2, T3 item3, T4 item4)
205-
{
206-
var writer = default(SliceWriter);
207-
var tuple = (item1, item2, item3, item4);
208-
encoder.WriteKeyPartsTo(ref writer, 4, ref tuple);
209-
return writer.ToSlice();
210-
}
211-
212-
public static Slice EncodeKey<T1, T2, T3, T4>(this ICompositeKeyEncoder<T1, T2, T3, T4> encoder, Slice prefix, T1 item1, T2 item2, T3 item3, T4 item4)
213-
{
214-
var writer = new SliceWriter(prefix.Count + 48);
215-
writer.WriteBytes(prefix);
216-
encoder.WriteKeyTo(ref writer, item1, item2, item3, item4);
217-
return writer.ToSlice();
218-
}
219-
220-
public static Slice EncodeKeyParts<T1, T2, T3, T4>(this ICompositeKeyEncoder<T1, T2, T3, T4> encoder, int count, (T1, T2, T3, T4) items)
221-
{
222-
var writer = default(SliceWriter);
223-
encoder.WriteKeyPartsTo(ref writer, count, ref items);
224-
return writer.ToSlice();
225-
}
226-
227-
public static STuple<T1, T2, T3, T4> DecodeKey<T1, T2, T3, T4>(this ICompositeKeyEncoder<T1, T2, T3, T4> decoder, Slice encoded)
228-
{
229-
var reader = new SliceReader(encoded);
230-
decoder.ReadKeyFrom(ref reader, out var items);
231-
//TODO: throw if extra bytes?
232-
return items;
233-
}
234-
235-
public static STuple<T1, T2, T3, T4> DecodeKeyParts<T1, T2, T3, T4>(this ICompositeKeyEncoder<T1, T2, T3, T4> encoder, int count, Slice encoded)
236-
{
237-
var reader = new SliceReader(encoded);
238-
encoder.ReadKeyPartsFrom(ref reader, count, out var items);
239-
return items;
240-
}
241-
242-
#endregion
243-
244-
#region <T1, T2, T3, T4, T5>
245-
246-
public static void WriteKeyTo<T1, T2, T3, T4, T5>(this ICompositeKeyEncoder<T1, T2, T3, T4, T5> encoder, ref SliceWriter writer, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5)
247-
{
248-
var tuple = (value1, value2, value3, value4, value5);
249-
encoder.WriteKeyPartsTo(ref writer, 5, ref tuple);
250-
}
251-
252-
public static Slice EncodeKey<T1, T2, T3, T4, T5>(this ICompositeKeyEncoder<T1, T2, T3, T4, T5> encoder, T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
253-
{
254-
var writer = default(SliceWriter);
255-
var tuple = (item1, item2, item3, item4, item5);
256-
encoder.WriteKeyPartsTo(ref writer, 5, ref tuple);
257-
return writer.ToSlice();
258-
}
259-
260-
public static Slice EncodeKey<T1, T2, T3, T4, T5>(this ICompositeKeyEncoder<T1, T2, T3, T4, T5> encoder, Slice prefix, T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
261-
{
262-
var writer = new SliceWriter(prefix.Count + 56);
263-
writer.WriteBytes(prefix);
264-
encoder.WriteKeyTo(ref writer, item1, item2, item3, item4, item5);
265-
return writer.ToSlice();
266-
}
267-
268-
public static Slice EncodeKeyParts<T1, T2, T3, T4, T5>(this ICompositeKeyEncoder<T1, T2, T3, T4, T5> encoder, int count, (T1, T2, T3, T4, T5) items)
269-
{
270-
var writer = default(SliceWriter);
271-
encoder.WriteKeyPartsTo(ref writer, count, ref items);
272-
return writer.ToSlice();
273-
}
274-
275-
public static STuple<T1, T2, T3, T4, T5> DecodeKey<T1, T2, T3, T4, T5>(this ICompositeKeyEncoder<T1, T2, T3, T4, T5> decoder, Slice encoded)
276-
{
277-
var reader = new SliceReader(encoded);
278-
decoder.ReadKeyFrom(ref reader, out var items);
279-
//TODO: throw if extra bytes?
280-
return items;
281-
}
282-
283-
public static STuple<T1, T2, T3, T4, T5> DecodeKeyParts<T1, T2, T3, T4, T5>(this ICompositeKeyEncoder<T1, T2, T3, T4, T5> encoder, int count, Slice encoded)
284-
{
285-
var reader = new SliceReader(encoded);
286-
encoder.ReadKeyPartsFrom(ref reader, count, out var items);
287-
return items;
288-
}
289-
290-
291-
#endregion
292-
293-
}
294-
29578
}

FoundationDB.Client/Shared/TypeSystem/Encoders/IKeyEncoder.cs

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,30 +49,4 @@ public interface IKeyEncoder<T1> : IKeyEncoder
4949
void ReadKeyFrom(ref SliceReader reader, out T1 value);
5050
}
5151

52-
public static partial class KeyEncoderExtensions
53-
{
54-
55-
public static Slice EncodeKey<T1>([NotNull] this IKeyEncoder<T1> encoder, T1 value)
56-
{
57-
var writer = default(SliceWriter);
58-
encoder.WriteKeyTo(ref writer, value);
59-
return writer.ToSlice();
60-
}
61-
62-
public static Slice EncodeKey<T1>([NotNull] this IKeyEncoder<T1> encoder, Slice prefix, T1 value)
63-
{
64-
var writer = new SliceWriter(prefix.Count + 16); // ~16 bytes si T1 = Guid
65-
writer.WriteBytes(prefix);
66-
encoder.WriteKeyTo(ref writer, value);
67-
return writer.ToSlice();
68-
}
69-
70-
public static T1 DecodeKey<T1>([NotNull] this IKeyEncoder<T1> decoder, Slice encoded)
71-
{
72-
var reader = new SliceReader(encoded);
73-
decoder.ReadKeyFrom(ref reader, out T1 item);
74-
//TODO: should we fail if extra bytes?
75-
return item;
76-
}
77-
}
7852
}

0 commit comments

Comments
 (0)