1 // Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors
2 // Licensed under the MIT License:
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining a copy
5 // of this software and associated documentation files (the "Software"), to deal
6 // in the Software without restriction, including without limitation the rights
7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 // copies of the Software, and to permit persons to whom the Software is
9 // furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 // THE SOFTWARE.
21 
22 module capnproto.GeneratedClassSupport;
23 
24 import java.nio.ByteBuffer;
25 
26 import capnproto.AnyPointer;
27 import capnproto.Data;
28 import capnproto.ReaderArena;
29 import capnproto.SegmentReader;
30 import capnproto.Text;
31 
32 struct GeneratedClassSupport
33 {
34 	static SegmentReader decodeRawBytes(ubyte[] s)
35 	{
36 		ByteBuffer[] bb;
37 		return SegmentReader(ByteBuffer(s), new ReaderArena(bb, 0x7fffffffffffffffL));
38 	}
39 	
40 	struct Const(T)
41 	{
42 	public:
43 		this(SegmentReader* reader, int offset, int size)
44 		{
45 			this.reader = reader;
46 			this.offset = offset;
47 			this.size = size;
48 		}
49 		
50 		T.Reader get() const
51 		{
52 			static if(is(T : Data))
53 				return Data.Reader(cast(ByteBuffer)reader.buffer, offset, size);
54 			else static if(is(T : Text))
55 				return Text.Reader(cast(ByteBuffer)reader.buffer, offset, size);
56 			else
57 				return AnyPointer.Reader(reader, offset, size).getAs!T();
58 		}
59 	
60 	private:
61 		SegmentReader* reader;
62 		int offset;
63 		int size;
64 	}
65 }