comparison win32-mingw/include/capnp/any.h @ 64:eccd51b72864

Update Win32 capnp builds to v0.6
author Chris Cannam
date Tue, 23 May 2017 09:16:54 +0100
parents 37d53a7e8262
children
comparison
equal deleted inserted replaced
63:0f2d93caa50c 64:eccd51b72864
206 206
207 inline AnyList::Builder initAsAnyList(ElementSize elementSize, uint elementCount); 207 inline AnyList::Builder initAsAnyList(ElementSize elementSize, uint elementCount);
208 // Note: Does not accept INLINE_COMPOSITE for elementSize. 208 // Note: Does not accept INLINE_COMPOSITE for elementSize.
209 209
210 inline List<AnyStruct>::Builder initAsListOfAnyStruct( 210 inline List<AnyStruct>::Builder initAsListOfAnyStruct(
211 uint dataWordCount, uint pointerCount, uint elementCount); 211 uint16_t dataWordCount, uint16_t pointerCount, uint elementCount);
212 212
213 inline AnyStruct::Builder initAsAnyStruct(uint dataWordCount, uint pointerCount); 213 inline AnyStruct::Builder initAsAnyStruct(uint16_t dataWordCount, uint16_t pointerCount);
214 214
215 template <typename T> 215 template <typename T>
216 inline void setAs(ReaderFor<T> value); 216 inline void setAs(ReaderFor<T> value);
217 // Valid for ReaderType = T::Reader for T = any generated struct type, List<U>, Text, Data, 217 // Valid for ReaderType = T::Reader for T = any generated struct type, List<U>, Text, Data,
218 // DynamicStruct, or DynamicList (the dynamic types require `#include <capnp/dynamic.h>`). 218 // DynamicStruct, or DynamicList (the dynamic types require `#include <capnp/dynamic.h>`).
396 typedef List<AnyPointer> Reads; 396 typedef List<AnyPointer> Reads;
397 397
398 inline Reader(): reader(ElementSize::POINTER) {} 398 inline Reader(): reader(ElementSize::POINTER) {}
399 inline explicit Reader(_::ListReader reader): reader(reader) {} 399 inline explicit Reader(_::ListReader reader): reader(reader) {}
400 400
401 inline uint size() const { return reader.size() / ELEMENTS; } 401 inline uint size() const { return unbound(reader.size() / ELEMENTS); }
402 inline AnyPointer::Reader operator[](uint index) const { 402 inline AnyPointer::Reader operator[](uint index) const {
403 KJ_IREQUIRE(index < size()); 403 KJ_IREQUIRE(index < size());
404 return AnyPointer::Reader(reader.getPointerElement(index * ELEMENTS)); 404 return AnyPointer::Reader(reader.getPointerElement(bounded(index) * ELEMENTS));
405 } 405 }
406 406
407 typedef _::IndexingIterator<const Reader, typename AnyPointer::Reader> Iterator; 407 typedef _::IndexingIterator<const Reader, typename AnyPointer::Reader> Iterator;
408 inline Iterator begin() const { return Iterator(this, 0); } 408 inline Iterator begin() const { return Iterator(this, 0); }
409 inline Iterator end() const { return Iterator(this, size()); } 409 inline Iterator end() const { return Iterator(this, size()); }
428 inline explicit Builder(_::ListBuilder builder): builder(builder) {} 428 inline explicit Builder(_::ListBuilder builder): builder(builder) {}
429 429
430 inline operator Reader() const { return Reader(builder.asReader()); } 430 inline operator Reader() const { return Reader(builder.asReader()); }
431 inline Reader asReader() const { return Reader(builder.asReader()); } 431 inline Reader asReader() const { return Reader(builder.asReader()); }
432 432
433 inline uint size() const { return builder.size() / ELEMENTS; } 433 inline uint size() const { return unbound(builder.size() / ELEMENTS); }
434 inline AnyPointer::Builder operator[](uint index) { 434 inline AnyPointer::Builder operator[](uint index) {
435 KJ_IREQUIRE(index < size()); 435 KJ_IREQUIRE(index < size());
436 return AnyPointer::Builder(builder.getPointerElement(index * ELEMENTS)); 436 return AnyPointer::Builder(builder.getPointerElement(bounded(index) * ELEMENTS));
437 } 437 }
438 438
439 typedef _::IndexingIterator<Builder, typename AnyPointer::Builder> Iterator; 439 typedef _::IndexingIterator<Builder, typename AnyPointer::Builder> Iterator;
440 inline Iterator begin() { return Iterator(this, 0); } 440 inline Iterator begin() { return Iterator(this, 0); }
441 inline Iterator end() { return Iterator(this, size()); } 441 inline Iterator end() { return Iterator(this, size()); }
561 typedef List<AnyStruct> Reads; 561 typedef List<AnyStruct> Reads;
562 562
563 inline Reader(): reader(ElementSize::INLINE_COMPOSITE) {} 563 inline Reader(): reader(ElementSize::INLINE_COMPOSITE) {}
564 inline explicit Reader(_::ListReader reader): reader(reader) {} 564 inline explicit Reader(_::ListReader reader): reader(reader) {}
565 565
566 inline uint size() const { return reader.size() / ELEMENTS; } 566 inline uint size() const { return unbound(reader.size() / ELEMENTS); }
567 inline AnyStruct::Reader operator[](uint index) const { 567 inline AnyStruct::Reader operator[](uint index) const {
568 KJ_IREQUIRE(index < size()); 568 KJ_IREQUIRE(index < size());
569 return AnyStruct::Reader(reader.getStructElement(index * ELEMENTS)); 569 return AnyStruct::Reader(reader.getStructElement(bounded(index) * ELEMENTS));
570 } 570 }
571 571
572 typedef _::IndexingIterator<const Reader, typename AnyStruct::Reader> Iterator; 572 typedef _::IndexingIterator<const Reader, typename AnyStruct::Reader> Iterator;
573 inline Iterator begin() const { return Iterator(this, 0); } 573 inline Iterator begin() const { return Iterator(this, 0); }
574 inline Iterator end() const { return Iterator(this, size()); } 574 inline Iterator end() const { return Iterator(this, size()); }
593 inline explicit Builder(_::ListBuilder builder): builder(builder) {} 593 inline explicit Builder(_::ListBuilder builder): builder(builder) {}
594 594
595 inline operator Reader() const { return Reader(builder.asReader()); } 595 inline operator Reader() const { return Reader(builder.asReader()); }
596 inline Reader asReader() const { return Reader(builder.asReader()); } 596 inline Reader asReader() const { return Reader(builder.asReader()); }
597 597
598 inline uint size() const { return builder.size() / ELEMENTS; } 598 inline uint size() const { return unbound(builder.size() / ELEMENTS); }
599 inline AnyStruct::Builder operator[](uint index) { 599 inline AnyStruct::Builder operator[](uint index) {
600 KJ_IREQUIRE(index < size()); 600 KJ_IREQUIRE(index < size());
601 return AnyStruct::Builder(builder.getStructElement(index * ELEMENTS)); 601 return AnyStruct::Builder(builder.getStructElement(bounded(index) * ELEMENTS));
602 } 602 }
603 603
604 typedef _::IndexingIterator<Builder, typename AnyStruct::Builder> Iterator; 604 typedef _::IndexingIterator<Builder, typename AnyStruct::Builder> Iterator;
605 inline Iterator begin() { return Iterator(this, 0); } 605 inline Iterator begin() { return Iterator(this, 0); }
606 inline Iterator end() { return Iterator(this, size()); } 606 inline Iterator end() { return Iterator(this, size()); }
626 inline Reader(T&& value) 626 inline Reader(T&& value)
627 : _reader(_::PointerHelpers<FromReader<T>>::getInternalReader(kj::fwd<T>(value))) {} 627 : _reader(_::PointerHelpers<FromReader<T>>::getInternalReader(kj::fwd<T>(value))) {}
628 #endif 628 #endif
629 629
630 inline ElementSize getElementSize() { return _reader.getElementSize(); } 630 inline ElementSize getElementSize() { return _reader.getElementSize(); }
631 inline uint size() { return _reader.size() / ELEMENTS; } 631 inline uint size() { return unbound(_reader.size() / ELEMENTS); }
632 632
633 inline kj::ArrayPtr<const byte> getRawBytes() { return _reader.asRawBytes(); } 633 inline kj::ArrayPtr<const byte> getRawBytes() { return _reader.asRawBytes(); }
634 634
635 Equality equals(AnyList::Reader right); 635 Equality equals(AnyList::Reader right);
636 bool operator==(AnyList::Reader right); 636 bool operator==(AnyList::Reader right);
662 inline Builder(T&& value) 662 inline Builder(T&& value)
663 : _builder(_::PointerHelpers<FromBuilder<T>>::getInternalBuilder(kj::fwd<T>(value))) {} 663 : _builder(_::PointerHelpers<FromBuilder<T>>::getInternalBuilder(kj::fwd<T>(value))) {}
664 #endif 664 #endif
665 665
666 inline ElementSize getElementSize() { return _builder.getElementSize(); } 666 inline ElementSize getElementSize() { return _builder.getElementSize(); }
667 inline uint size() { return _builder.size() / ELEMENTS; } 667 inline uint size() { return unbound(_builder.size() / ELEMENTS); }
668 668
669 Equality equals(AnyList::Reader right); 669 Equality equals(AnyList::Reader right);
670 inline bool operator==(AnyList::Reader right) { 670 inline bool operator==(AnyList::Reader right) {
671 return asReader() == right; 671 return asReader() == right;
672 } 672 }
779 return _::PointerHelpers<T>::init(builder, elementCount); 779 return _::PointerHelpers<T>::init(builder, elementCount);
780 } 780 }
781 781
782 inline AnyList::Builder AnyPointer::Builder::initAsAnyList( 782 inline AnyList::Builder AnyPointer::Builder::initAsAnyList(
783 ElementSize elementSize, uint elementCount) { 783 ElementSize elementSize, uint elementCount) {
784 return AnyList::Builder(builder.initList(elementSize, elementCount * ELEMENTS)); 784 return AnyList::Builder(builder.initList(elementSize, bounded(elementCount) * ELEMENTS));
785 } 785 }
786 786
787 inline List<AnyStruct>::Builder AnyPointer::Builder::initAsListOfAnyStruct( 787 inline List<AnyStruct>::Builder AnyPointer::Builder::initAsListOfAnyStruct(
788 uint dataWordCount, uint pointerCount, uint elementCount) { 788 uint16_t dataWordCount, uint16_t pointerCount, uint elementCount) {
789 return List<AnyStruct>::Builder(builder.initStructList(elementCount * ELEMENTS, 789 return List<AnyStruct>::Builder(builder.initStructList(bounded(elementCount) * ELEMENTS,
790 _::StructSize(dataWordCount * WORDS, pointerCount * POINTERS))); 790 _::StructSize(bounded(dataWordCount) * WORDS,
791 } 791 bounded(pointerCount) * POINTERS)));
792 792 }
793 inline AnyStruct::Builder AnyPointer::Builder::initAsAnyStruct(uint dataWordCount, uint pointerCount) { 793
794 inline AnyStruct::Builder AnyPointer::Builder::initAsAnyStruct(
795 uint16_t dataWordCount, uint16_t pointerCount) {
794 return AnyStruct::Builder(builder.initStruct( 796 return AnyStruct::Builder(builder.initStruct(
795 _::StructSize(dataWordCount * WORDS, pointerCount * POINTERS))); 797 _::StructSize(bounded(dataWordCount) * WORDS,
798 bounded(pointerCount) * POINTERS)));
796 } 799 }
797 800
798 template <typename T> 801 template <typename T>
799 inline void AnyPointer::Builder::setAs(ReaderFor<T> value) { 802 inline void AnyPointer::Builder::setAs(ReaderFor<T> value) {
800 return _::PointerHelpers<T>::set(builder, value); 803 return _::PointerHelpers<T>::set(builder, value);
958 } 961 }
959 static inline AnyStruct::Builder get( 962 static inline AnyStruct::Builder get(
960 PointerBuilder builder, const word* defaultValue = nullptr) { 963 PointerBuilder builder, const word* defaultValue = nullptr) {
961 // TODO(someday): Allow specifying the size somehow? 964 // TODO(someday): Allow specifying the size somehow?
962 return AnyStruct::Builder(builder.getStruct( 965 return AnyStruct::Builder(builder.getStruct(
963 _::StructSize(0 * WORDS, 0 * POINTERS), defaultValue)); 966 _::StructSize(ZERO * WORDS, ZERO * POINTERS), defaultValue));
964 } 967 }
965 static inline void set(PointerBuilder builder, AnyStruct::Reader value) { 968 static inline void set(PointerBuilder builder, AnyStruct::Reader value) {
966 builder.setStruct(value._reader); 969 builder.setStruct(value._reader);
967 } 970 }
968 static inline AnyStruct::Builder init( 971 static inline AnyStruct::Builder init(
969 PointerBuilder builder, uint dataWordCount, uint pointerCount) { 972 PointerBuilder builder, uint16_t dataWordCount, uint16_t pointerCount) {
970 return AnyStruct::Builder(builder.initStruct( 973 return AnyStruct::Builder(builder.initStruct(
971 StructSize(dataWordCount * WORDS, pointerCount * POINTERS))); 974 StructSize(bounded(dataWordCount) * WORDS,
972 } 975 bounded(pointerCount) * POINTERS)));
973 976 }
974 // TODO(soon): implement these 977
975 static void adopt(PointerBuilder builder, Orphan<AnyStruct>&& value); 978 static void adopt(PointerBuilder builder, Orphan<AnyStruct>&& value) {
976 static Orphan<AnyStruct> disown(PointerBuilder builder); 979 builder.adopt(kj::mv(value.builder));
980 }
981 static Orphan<AnyStruct> disown(PointerBuilder builder) {
982 return Orphan<AnyStruct>(builder.disown());
983 }
977 }; 984 };
978 985
979 template <> 986 template <>
980 struct PointerHelpers<AnyList, Kind::OTHER> { 987 struct PointerHelpers<AnyList, Kind::OTHER> {
981 static inline AnyList::Reader get( 988 static inline AnyList::Reader get(
989 static inline void set(PointerBuilder builder, AnyList::Reader value) { 996 static inline void set(PointerBuilder builder, AnyList::Reader value) {
990 builder.setList(value._reader); 997 builder.setList(value._reader);
991 } 998 }
992 static inline AnyList::Builder init( 999 static inline AnyList::Builder init(
993 PointerBuilder builder, ElementSize elementSize, uint elementCount) { 1000 PointerBuilder builder, ElementSize elementSize, uint elementCount) {
994 return AnyList::Builder(builder.initList(elementSize, elementCount * ELEMENTS)); 1001 return AnyList::Builder(builder.initList(
1002 elementSize, bounded(elementCount) * ELEMENTS));
995 } 1003 }
996 static inline AnyList::Builder init( 1004 static inline AnyList::Builder init(
997 PointerBuilder builder, uint dataWordCount, uint pointerCount, uint elementCount) { 1005 PointerBuilder builder, uint16_t dataWordCount, uint16_t pointerCount, uint elementCount) {
998 return AnyList::Builder(builder.initStructList( 1006 return AnyList::Builder(builder.initStructList(
999 elementCount * ELEMENTS, StructSize(dataWordCount * WORDS, pointerCount * POINTERS))); 1007 bounded(elementCount) * ELEMENTS,
1000 } 1008 StructSize(bounded(dataWordCount) * WORDS,
1001 1009 bounded(pointerCount) * POINTERS)));
1002 // TODO(soon): implement these 1010 }
1003 static void adopt(PointerBuilder builder, Orphan<AnyList>&& value); 1011
1004 static Orphan<AnyList> disown(PointerBuilder builder); 1012 static void adopt(PointerBuilder builder, Orphan<AnyList>&& value) {
1013 builder.adopt(kj::mv(value.builder));
1014 }
1015 static Orphan<AnyList> disown(PointerBuilder builder) {
1016 return Orphan<AnyList>(builder.disown());
1017 }
1005 }; 1018 };
1006 1019
1007 template <> 1020 template <>
1008 struct OrphanGetImpl<AnyStruct, Kind::OTHER> { 1021 struct OrphanGetImpl<AnyStruct, Kind::OTHER> {
1009 static inline AnyStruct::Builder apply(_::OrphanBuilder& builder) { 1022 static inline AnyStruct::Builder apply(_::OrphanBuilder& builder) {
1010 return AnyStruct::Builder(builder.asStruct(_::StructSize(0 * WORDS, 0 * POINTERS))); 1023 return AnyStruct::Builder(builder.asStruct(_::StructSize(ZERO * WORDS, ZERO * POINTERS)));
1011 } 1024 }
1012 static inline AnyStruct::Reader applyReader(const _::OrphanBuilder& builder) { 1025 static inline AnyStruct::Reader applyReader(const _::OrphanBuilder& builder) {
1013 return AnyStruct::Reader(builder.asStructReader(_::StructSize(0 * WORDS, 0 * POINTERS))); 1026 return AnyStruct::Reader(builder.asStructReader(_::StructSize(ZERO * WORDS, ZERO * POINTERS)));
1014 } 1027 }
1015 static inline void truncateListOf(_::OrphanBuilder& builder, ElementCount size) { 1028 static inline void truncateListOf(_::OrphanBuilder& builder, ElementCount size) {
1016 builder.truncate(size, _::StructSize(0 * WORDS, 0 * POINTERS)); 1029 builder.truncate(size, _::StructSize(ZERO * WORDS, ZERO * POINTERS));
1030 }
1031 };
1032
1033 template <>
1034 struct OrphanGetImpl<AnyList, Kind::OTHER> {
1035 static inline AnyList::Builder apply(_::OrphanBuilder& builder) {
1036 return AnyList::Builder(builder.asListAnySize());
1037 }
1038 static inline AnyList::Reader applyReader(const _::OrphanBuilder& builder) {
1039 return AnyList::Reader(builder.asListReaderAnySize());
1040 }
1041 static inline void truncateListOf(_::OrphanBuilder& builder, ElementCount size) {
1042 builder.truncate(size, ElementSize::POINTER);
1017 } 1043 }
1018 }; 1044 };
1019 1045
1020 } // namespace _ (private) 1046 } // namespace _ (private)
1021 1047