Mercurial > hg > sv-dependency-builds
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 |