Unverified Commit 30c7d54b authored by Kenton Varda's avatar Kenton Varda Committed by GitHub

Merge pull request #701 from antis81/fix/const-eq-operators

fix const-correctness on AnyPointer equality checks
parents 06a71367 5ace519a
...@@ -79,7 +79,7 @@ kj::Own<ClientHook> AnyPointer::Pipeline::asCap() { ...@@ -79,7 +79,7 @@ kj::Own<ClientHook> AnyPointer::Pipeline::asCap() {
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
Equality AnyStruct::Reader::equals(AnyStruct::Reader right) { Equality AnyStruct::Reader::equals(AnyStruct::Reader right) const {
auto dataL = getDataSection(); auto dataL = getDataSection();
size_t dataSizeL = dataL.size(); size_t dataSizeL = dataL.size();
while(dataSizeL > 0 && dataL[dataSizeL - 1] == 0) { while(dataSizeL > 0 && dataL[dataSizeL - 1] == 0) {
...@@ -150,7 +150,7 @@ kj::StringPtr KJ_STRINGIFY(Equality res) { ...@@ -150,7 +150,7 @@ kj::StringPtr KJ_STRINGIFY(Equality res) {
KJ_UNREACHABLE; KJ_UNREACHABLE;
} }
Equality AnyList::Reader::equals(AnyList::Reader right) { Equality AnyList::Reader::equals(AnyList::Reader right) const {
if(size() != right.size()) { if(size() != right.size()) {
return Equality::NOT_EQUAL; return Equality::NOT_EQUAL;
} }
...@@ -209,7 +209,7 @@ Equality AnyList::Reader::equals(AnyList::Reader right) { ...@@ -209,7 +209,7 @@ Equality AnyList::Reader::equals(AnyList::Reader right) {
KJ_UNREACHABLE; KJ_UNREACHABLE;
} }
Equality AnyPointer::Reader::equals(AnyPointer::Reader right) { Equality AnyPointer::Reader::equals(AnyPointer::Reader right) const {
if(getPointerType() != right.getPointerType()) { if(getPointerType() != right.getPointerType()) {
return Equality::NOT_EQUAL; return Equality::NOT_EQUAL;
} }
...@@ -227,7 +227,7 @@ Equality AnyPointer::Reader::equals(AnyPointer::Reader right) { ...@@ -227,7 +227,7 @@ Equality AnyPointer::Reader::equals(AnyPointer::Reader right) {
KJ_UNREACHABLE; KJ_UNREACHABLE;
} }
bool AnyPointer::Reader::operator==(AnyPointer::Reader right) { bool AnyPointer::Reader::operator==(AnyPointer::Reader right) const {
switch(equals(right)) { switch(equals(right)) {
case Equality::EQUAL: case Equality::EQUAL:
return true; return true;
...@@ -240,7 +240,7 @@ bool AnyPointer::Reader::operator==(AnyPointer::Reader right) { ...@@ -240,7 +240,7 @@ bool AnyPointer::Reader::operator==(AnyPointer::Reader right) {
KJ_UNREACHABLE; KJ_UNREACHABLE;
} }
bool AnyStruct::Reader::operator==(AnyStruct::Reader right) { bool AnyStruct::Reader::operator==(AnyStruct::Reader right) const {
switch(equals(right)) { switch(equals(right)) {
case Equality::EQUAL: case Equality::EQUAL:
return true; return true;
...@@ -253,7 +253,7 @@ bool AnyStruct::Reader::operator==(AnyStruct::Reader right) { ...@@ -253,7 +253,7 @@ bool AnyStruct::Reader::operator==(AnyStruct::Reader right) {
KJ_UNREACHABLE; KJ_UNREACHABLE;
} }
bool AnyList::Reader::operator==(AnyList::Reader right) { bool AnyList::Reader::operator==(AnyList::Reader right) const {
switch(equals(right)) { switch(equals(right)) {
case Equality::EQUAL: case Equality::EQUAL:
return true; return true;
......
...@@ -104,9 +104,9 @@ struct AnyPointer { ...@@ -104,9 +104,9 @@ struct AnyPointer {
inline bool isList() const { return getPointerType() == PointerType::LIST; } inline bool isList() const { return getPointerType() == PointerType::LIST; }
inline bool isCapability() const { return getPointerType() == PointerType::CAPABILITY; } inline bool isCapability() const { return getPointerType() == PointerType::CAPABILITY; }
Equality equals(AnyPointer::Reader right); Equality equals(AnyPointer::Reader right) const;
bool operator==(AnyPointer::Reader right); bool operator==(AnyPointer::Reader right) const;
inline bool operator!=(AnyPointer::Reader right) { inline bool operator!=(AnyPointer::Reader right) const {
return !(*this == right); return !(*this == right);
} }
...@@ -158,13 +158,13 @@ struct AnyPointer { ...@@ -158,13 +158,13 @@ struct AnyPointer {
inline bool isList() { return getPointerType() == PointerType::LIST; } inline bool isList() { return getPointerType() == PointerType::LIST; }
inline bool isCapability() { return getPointerType() == PointerType::CAPABILITY; } inline bool isCapability() { return getPointerType() == PointerType::CAPABILITY; }
inline Equality equals(AnyPointer::Reader right) { inline Equality equals(AnyPointer::Reader right) const {
return asReader().equals(right); return asReader().equals(right);
} }
inline bool operator==(AnyPointer::Reader right) { inline bool operator==(AnyPointer::Reader right) const {
return asReader() == right; return asReader() == right;
} }
inline bool operator!=(AnyPointer::Reader right) { inline bool operator!=(AnyPointer::Reader right) const {
return !(*this == right); return !(*this == right);
} }
...@@ -466,10 +466,10 @@ public: ...@@ -466,10 +466,10 @@ public:
inline MessageSize totalSize() const { return _reader.totalSize().asPublic(); } inline MessageSize totalSize() const { return _reader.totalSize().asPublic(); }
kj::ArrayPtr<const byte> getDataSection() { kj::ArrayPtr<const byte> getDataSection() const {
return _reader.getDataSectionAsBlob(); return _reader.getDataSectionAsBlob();
} }
List<AnyPointer>::Reader getPointerSection() { List<AnyPointer>::Reader getPointerSection() const {
return List<AnyPointer>::Reader(_reader.getPointerSectionAsList()); return List<AnyPointer>::Reader(_reader.getPointerSectionAsList());
} }
...@@ -477,9 +477,9 @@ public: ...@@ -477,9 +477,9 @@ public:
return _reader.canonicalize(); return _reader.canonicalize();
} }
Equality equals(AnyStruct::Reader right); Equality equals(AnyStruct::Reader right) const;
bool operator==(AnyStruct::Reader right); bool operator==(AnyStruct::Reader right) const;
inline bool operator!=(AnyStruct::Reader right) { inline bool operator!=(AnyStruct::Reader right) const {
return !(*this == right); return !(*this == right);
} }
...@@ -521,13 +521,13 @@ public: ...@@ -521,13 +521,13 @@ public:
return List<AnyPointer>::Builder(_builder.getPointerSectionAsList()); return List<AnyPointer>::Builder(_builder.getPointerSectionAsList());
} }
inline Equality equals(AnyStruct::Reader right) { inline Equality equals(AnyStruct::Reader right) const {
return asReader().equals(right); return asReader().equals(right);
} }
inline bool operator==(AnyStruct::Reader right) { inline bool operator==(AnyStruct::Reader right) const {
return asReader() == right; return asReader() == right;
} }
inline bool operator!=(AnyStruct::Reader right) { inline bool operator!=(AnyStruct::Reader right) const {
return !(*this == right); return !(*this == right);
} }
...@@ -646,14 +646,14 @@ public: ...@@ -646,14 +646,14 @@ public:
: _reader(_::PointerHelpers<FromReader<T>>::getInternalReader(kj::fwd<T>(value))) {} : _reader(_::PointerHelpers<FromReader<T>>::getInternalReader(kj::fwd<T>(value))) {}
#endif #endif
inline ElementSize getElementSize() { return _reader.getElementSize(); } inline ElementSize getElementSize() const { return _reader.getElementSize(); }
inline uint size() { return unbound(_reader.size() / ELEMENTS); } inline uint size() const { return unbound(_reader.size() / ELEMENTS); }
inline kj::ArrayPtr<const byte> getRawBytes() { return _reader.asRawBytes(); } inline kj::ArrayPtr<const byte> getRawBytes() const { return _reader.asRawBytes(); }
Equality equals(AnyList::Reader right); Equality equals(AnyList::Reader right) const;
bool operator==(AnyList::Reader right); bool operator==(AnyList::Reader right) const;
inline bool operator!=(AnyList::Reader right) { inline bool operator!=(AnyList::Reader right) const {
return !(*this == right); return !(*this == right);
} }
...@@ -661,7 +661,7 @@ public: ...@@ -661,7 +661,7 @@ public:
return _reader.totalSize().asPublic(); return _reader.totalSize().asPublic();
} }
template <typename T> ReaderFor<T> as() { template <typename T> ReaderFor<T> as() const {
// T must be List<U>. // T must be List<U>.
return ReaderFor<T>(_reader); return ReaderFor<T>(_reader);
} }
...@@ -689,11 +689,11 @@ public: ...@@ -689,11 +689,11 @@ public:
inline ElementSize getElementSize() { return _builder.getElementSize(); } inline ElementSize getElementSize() { return _builder.getElementSize(); }
inline uint size() { return unbound(_builder.size() / ELEMENTS); } inline uint size() { return unbound(_builder.size() / ELEMENTS); }
Equality equals(AnyList::Reader right); Equality equals(AnyList::Reader right) const;
inline bool operator==(AnyList::Reader right) { inline bool operator==(AnyList::Reader right) const{
return asReader() == right; return asReader() == right;
} }
inline bool operator!=(AnyList::Reader right) { inline bool operator!=(AnyList::Reader right) const{
return !(*this == right); return !(*this == right);
} }
......
...@@ -3079,7 +3079,7 @@ Data::Reader ListReader::asData() { ...@@ -3079,7 +3079,7 @@ Data::Reader ListReader::asData() {
return Data::Reader(reinterpret_cast<const byte*>(ptr), unbound(elementCount / ELEMENTS)); return Data::Reader(reinterpret_cast<const byte*>(ptr), unbound(elementCount / ELEMENTS));
} }
kj::ArrayPtr<const byte> ListReader::asRawBytes() { kj::ArrayPtr<const byte> ListReader::asRawBytes() const {
KJ_REQUIRE(structPointerCount == ZERO * POINTERS, KJ_REQUIRE(structPointerCount == ZERO * POINTERS,
"Expected data only, got pointers.") { "Expected data only, got pointers.") {
return kj::ArrayPtr<const byte>(); return kj::ArrayPtr<const byte>();
......
...@@ -597,8 +597,8 @@ public: ...@@ -597,8 +597,8 @@ public:
inline StructDataBitCount getDataSectionSize() const { return dataSize; } inline StructDataBitCount getDataSectionSize() const { return dataSize; }
inline StructPointerCount getPointerSectionSize() const { return pointerCount; } inline StructPointerCount getPointerSectionSize() const { return pointerCount; }
inline kj::ArrayPtr<const byte> getDataSectionAsBlob(); inline kj::ArrayPtr<const byte> getDataSectionAsBlob() const;
inline _::ListReader getPointerSectionAsList(); inline _::ListReader getPointerSectionAsList() const;
kj::Array<word> canonicalize(); kj::Array<word> canonicalize();
...@@ -780,7 +780,7 @@ public: ...@@ -780,7 +780,7 @@ public:
Data::Reader asData(); Data::Reader asData();
// Reinterpret the list as a blob. Throws an exception if the elements are not byte-sized. // Reinterpret the list as a blob. Throws an exception if the elements are not byte-sized.
kj::ArrayPtr<const byte> asRawBytes(); kj::ArrayPtr<const byte> asRawBytes() const;
template <typename T> template <typename T>
KJ_ALWAYS_INLINE(T getDataElement(ElementCount index) const); KJ_ALWAYS_INLINE(T getDataElement(ElementCount index) const);
...@@ -1080,12 +1080,12 @@ inline PointerBuilder StructBuilder::getPointerField(StructPointerOffset ptrInde ...@@ -1080,12 +1080,12 @@ inline PointerBuilder StructBuilder::getPointerField(StructPointerOffset ptrInde
// ------------------------------------------------------------------- // -------------------------------------------------------------------
inline kj::ArrayPtr<const byte> StructReader::getDataSectionAsBlob() { inline kj::ArrayPtr<const byte> StructReader::getDataSectionAsBlob() const {
return kj::ArrayPtr<const byte>(reinterpret_cast<const byte*>(data), return kj::ArrayPtr<const byte>(reinterpret_cast<const byte*>(data),
unbound(dataSize / BITS_PER_BYTE / BYTES)); unbound(dataSize / BITS_PER_BYTE / BYTES));
} }
inline _::ListReader StructReader::getPointerSectionAsList() { inline _::ListReader StructReader::getPointerSectionAsList() const {
return _::ListReader(segment, capTable, pointers, pointerCount * (ONE * ELEMENTS / POINTERS), return _::ListReader(segment, capTable, pointers, pointerCount * (ONE * ELEMENTS / POINTERS),
ONE * POINTERS * BITS_PER_POINTER / ELEMENTS, ZERO * BITS, ONE * POINTERS, ONE * POINTERS * BITS_PER_POINTER / ELEMENTS, ZERO * BITS, ONE * POINTERS,
ElementSize::POINTER, nestingLimit); ElementSize::POINTER, nestingLimit);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment