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.TextList; 23 24 import capnproto.ElementSize; 25 import capnproto.ListBuilder; 26 import capnproto.ListReader; 27 import capnproto.SegmentBuilder; 28 import capnproto.SegmentReader; 29 import capnproto.Text; 30 31 struct TextList 32 { 33 enum elementSize = ElementSize.POINTER; 34 35 public: //Types. 36 static struct Reader 37 { 38 public: //Methods. 39 this(SegmentReader* segment, int ptr, int elementCount, int step, int structDataSize, short structPointerCount, int nestingLimit) 40 { 41 b = ListReader(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit); 42 } 43 44 size_t length() 45 { 46 return b.length; 47 } 48 49 string get(int index) 50 { 51 return b._getPointerElement!Text(index).toString(); 52 } 53 54 int opApply(scope int delegate(string) dg) 55 { 56 int result = 0; 57 foreach(i; 0..b.length) 58 { 59 result = dg(b._getPointerElement!Text(i).toString()); 60 if(result) 61 break; 62 } 63 return result; 64 } 65 66 package: //Variables. 67 ListReader b; 68 } 69 70 static struct Builder 71 { 72 public: //Methods. 73 this(SegmentBuilder* segment, int ptr, int elementCount, int step, int structDataSize, short structPointerCount) 74 { 75 b = ListBuilder(segment, ptr, elementCount, step, structDataSize, structPointerCount); 76 } 77 78 size_t length() 79 { 80 return b.length; 81 } 82 83 Text.Builder get(int index) 84 { 85 return b._getPointerElement!Text(index); 86 } 87 88 void set(int index, Text.Reader value) 89 { 90 b._setPointerElement(index, value); 91 } 92 93 int opApply(scope int delegate(Text.Builder) dg) 94 { 95 int result = 0; 96 foreach(i; 0..b.length) 97 { 98 result = dg(b._getPointerElement!Text(i)); 99 if(result) 100 break; 101 } 102 return result; 103 } 104 105 package: //Variables. 106 ListBuilder b; 107 } 108 }