@@ -29,6 +29,7 @@ DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
2929namespace Doxense . Serialization . Encoders
3030{
3131 using System ;
32+ using System . Runtime . CompilerServices ;
3233 using Doxense . Memory ;
3334
3435 public interface ICompositeKeyEncoder < T1 , T2 > : IKeyEncoder < ( T1 , T2 ) >
@@ -75,4 +76,116 @@ public interface ICompositeKeyEncoder<T1, T2, T3, T4, T5, T6> : IKeyEncoder<(T1,
7576 /// <summary>Read some or all parts of a composite key</summary>
7677 void ReadKeyPartsFrom ( ref SliceReader reader , int count , out ( T1 , T2 , T3 , T4 , T5 , T6 ) items ) ;
7778 }
79+
80+ /// <summary>Wrapper for encoding and decoding a pair with lambda functions</summary>
81+ public abstract class CompositeKeyEncoder < T1 , T2 > : ICompositeKeyEncoder < T1 , T2 >
82+ {
83+
84+ public abstract IKeyEncoding Encoding { get ; }
85+
86+ public abstract void WriteKeyPartsTo ( ref SliceWriter writer , int count , ref ( T1 , T2 ) items ) ;
87+
88+ public abstract void ReadKeyPartsFrom ( ref SliceReader reader , int count , out ( T1 , T2 ) items ) ;
89+
90+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
91+ public void WriteKeyTo ( ref SliceWriter writer , ( T1 , T2 ) items )
92+ {
93+ WriteKeyPartsTo ( ref writer , 2 , ref items ) ;
94+ }
95+
96+ public void ReadKeyFrom ( ref SliceReader reader , out ( T1 , T2 ) items )
97+ {
98+ ReadKeyPartsFrom ( ref reader , 2 , out items ) ;
99+ }
100+
101+ }
102+
103+ /// <summary>Wrapper for encoding and decoding a triplet with lambda functions</summary>
104+ public abstract class CompositeKeyEncoder < T1 , T2 , T3 > : ICompositeKeyEncoder < T1 , T2 , T3 >
105+ {
106+
107+ public abstract IKeyEncoding Encoding { get ; }
108+
109+ public abstract void WriteKeyPartsTo ( ref SliceWriter writer , int count , ref ( T1 , T2 , T3 ) items ) ;
110+
111+ public abstract void ReadKeyPartsFrom ( ref SliceReader reader , int count , out ( T1 , T2 , T3 ) items ) ;
112+
113+ public void WriteKeyTo ( ref SliceWriter writer , ( T1 , T2 , T3 ) items )
114+ {
115+ WriteKeyPartsTo ( ref writer , 3 , ref items ) ;
116+ }
117+
118+ public void ReadKeyFrom ( ref SliceReader reader , out ( T1 , T2 , T3 ) items )
119+ {
120+ ReadKeyPartsFrom ( ref reader , 3 , out items ) ;
121+ }
122+
123+ }
124+
125+ /// <summary>Wrapper for encoding and decoding a quad with lambda functions</summary>
126+ public abstract class CompositeKeyEncoder < T1 , T2 , T3 , T4 > : ICompositeKeyEncoder < T1 , T2 , T3 , T4 >
127+ {
128+
129+ public abstract IKeyEncoding Encoding { get ; }
130+
131+ public abstract void WriteKeyPartsTo ( ref SliceWriter writer , int count , ref ( T1 , T2 , T3 , T4 ) items ) ;
132+
133+ public abstract void ReadKeyPartsFrom ( ref SliceReader reader , int count , out ( T1 , T2 , T3 , T4 ) items ) ;
134+
135+ public void WriteKeyTo ( ref SliceWriter writer , ( T1 , T2 , T3 , T4 ) items )
136+ {
137+ WriteKeyPartsTo ( ref writer , 4 , ref items ) ;
138+ }
139+
140+ public void ReadKeyFrom ( ref SliceReader reader , out ( T1 , T2 , T3 , T4 ) items )
141+ {
142+ ReadKeyPartsFrom ( ref reader , 4 , out items ) ;
143+ }
144+
145+ }
146+
147+ /// <summary>Wrapper for encoding and decoding five items with lambda functions</summary>
148+ public abstract class CompositeKeyEncoder < T1 , T2 , T3 , T4 , T5 > : ICompositeKeyEncoder < T1 , T2 , T3 , T4 , T5 >
149+ {
150+
151+ public abstract IKeyEncoding Encoding { get ; }
152+
153+ public abstract void WriteKeyPartsTo ( ref SliceWriter writer , int count , ref ( T1 , T2 , T3 , T4 , T5 ) items ) ;
154+
155+ public abstract void ReadKeyPartsFrom ( ref SliceReader reader , int count , out ( T1 , T2 , T3 , T4 , T5 ) items ) ;
156+
157+ public void WriteKeyTo ( ref SliceWriter writer , ( T1 , T2 , T3 , T4 , T5 ) items )
158+ {
159+ WriteKeyPartsTo ( ref writer , 5 , ref items ) ;
160+ }
161+
162+ public void ReadKeyFrom ( ref SliceReader reader , out ( T1 , T2 , T3 , T4 , T5 ) items )
163+ {
164+ ReadKeyPartsFrom ( ref reader , 5 , out items ) ;
165+ }
166+
167+ }
168+
169+ /// <summary>Wrapper for encoding and decoding six items with lambda functions</summary>
170+ public abstract class CompositeKeyEncoder < T1 , T2 , T3 , T4 , T5 , T6 > : ICompositeKeyEncoder < T1 , T2 , T3 , T4 , T5 , T6 >
171+ {
172+
173+ public abstract IKeyEncoding Encoding { get ; }
174+
175+ public abstract void WriteKeyPartsTo ( ref SliceWriter writer , int count , ref ( T1 , T2 , T3 , T4 , T5 , T6 ) items ) ;
176+
177+ public abstract void ReadKeyPartsFrom ( ref SliceReader reader , int count , out ( T1 , T2 , T3 , T4 , T5 , T6 ) items ) ;
178+
179+ public void WriteKeyTo ( ref SliceWriter writer , ( T1 , T2 , T3 , T4 , T5 , T6 ) items )
180+ {
181+ WriteKeyPartsTo ( ref writer , 6 , ref items ) ;
182+ }
183+
184+ public void ReadKeyFrom ( ref SliceReader reader , out ( T1 , T2 , T3 , T4 , T5 , T6 ) items )
185+ {
186+ ReadKeyPartsFrom ( ref reader , 6 , out items ) ;
187+ }
188+
189+ }
190+
78191}
0 commit comments