diff options
| author | Julian Andres Klode <jak@debian.org> | 2026-02-09 11:40:49 +0100 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2026-02-10 19:59:03 +0000 |
| commit | 2e4cc2aebecac327c758965667643d36a02889e5 (patch) | |
| tree | b1ff25c399abbb50fcdc726e32d3a0c9b02b44c2 /apt-pkg/pkgcache.h | |
| parent | a08f18e2a1b7e409d2d20d55749d378d4c21daa6 (diff) | |
pkgcache: Change inline to constexpr noexcept
In particular, map_pointer and iterators are now
all literal types, with most functions translated
to constexpr noexcept.
This allows them to be used in constexpr contexts
in C++17; and the compiler to generate better code
knowing they cannot throw exceptions.
This transformation is safe, because the functions
are inline.
more constexpr
Diffstat (limited to 'apt-pkg/pkgcache.h')
| -rw-r--r-- | apt-pkg/pkgcache.h | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 042d928e1..27719b75b 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -98,21 +98,21 @@ typedef uint16_t map_fileid_t; template <typename T> class map_pointer { uint32_t val; public: - map_pointer() noexcept : val(0) {} - map_pointer(std::nullptr_t) noexcept : val(0) {} - explicit map_pointer(uint32_t n) noexcept : val(n) {} - explicit operator uint32_t() noexcept { return val; } - explicit operator bool() noexcept { return val != 0; } + constexpr map_pointer() noexcept : val(0) {} + constexpr map_pointer(std::nullptr_t) noexcept : val(0) {} + explicit constexpr map_pointer(uint32_t n) noexcept : val(n) {} + explicit constexpr operator uint32_t() const noexcept { return val; } + explicit constexpr operator bool() const noexcept { return val != 0; } }; -template<typename T> inline T *operator +(T *p, map_pointer<T> m) { return p + uint32_t(m); } -template<typename T> inline bool operator ==(map_pointer<T> u, map_pointer<T> m) { return uint32_t(u) == uint32_t(m); } -template<typename T> inline bool operator !=(map_pointer<T> u, map_pointer<T> m) { return uint32_t(u) != uint32_t(m); } -template<typename T> inline bool operator <(map_pointer<T> u, map_pointer<T> m) { return uint32_t(u) < uint32_t(m); } -template<typename T> inline bool operator >(map_pointer<T> u, map_pointer<T> m) { return uint32_t(u) > uint32_t(m); } -template<typename T> inline uint32_t operator -(map_pointer<T> u, map_pointer<T> m) { return uint32_t(u) - uint32_t(m); } -template<typename T> bool operator ==(map_pointer<T> m, std::nullptr_t) { return uint32_t(m) == 0; } -template<typename T> bool operator !=(map_pointer<T> m, std::nullptr_t) { return uint32_t(m) != 0; } +template<typename T> constexpr T *operator +(T *p, map_pointer<T> m) noexcept { return p + uint32_t(m); } +template<typename T> constexpr bool operator ==(map_pointer<T> u, map_pointer<T> m) noexcept{ return uint32_t(u) == uint32_t(m); } +template<typename T> constexpr bool operator !=(map_pointer<T> u, map_pointer<T> m) noexcept{ return uint32_t(u) != uint32_t(m); } +template<typename T> constexpr bool operator <(map_pointer<T> u, map_pointer<T> m) noexcept { return uint32_t(u) < uint32_t(m); } +template<typename T> constexpr bool operator >(map_pointer<T> u, map_pointer<T> m) noexcept { return uint32_t(u) > uint32_t(m); } +template<typename T> constexpr uint32_t operator -(map_pointer<T> u, map_pointer<T> m) noexcept { return uint32_t(u) - uint32_t(m); } +template<typename T> constexpr bool operator ==(map_pointer<T> m, std::nullptr_t) noexcept { return uint32_t(m) == 0; } +template<typename T> constexpr bool operator !=(map_pointer<T> m, std::nullptr_t) noexcept { return uint32_t(m) != 0; } // same as the previous, but documented to be to a string item typedef map_pointer<char> map_stringitem_t; @@ -262,18 +262,18 @@ class APT_PUBLIC pkgCache /*{{{*/ return {name, len}; } - Header &Head() {return *HeaderP;} - inline GrpIterator GrpBegin(); - inline GrpIterator GrpEnd(); - inline PkgIterator PkgBegin(); - inline PkgIterator PkgEnd(); - inline PkgFileIterator FileBegin(); - inline PkgFileIterator FileEnd(); - inline RlsFileIterator RlsFileBegin(); - inline RlsFileIterator RlsFileEnd(); + constexpr Header &Head() noexcept {return *HeaderP;} + inline GrpIterator GrpBegin() noexcept; + constexpr GrpIterator GrpEnd() noexcept; + inline PkgIterator PkgBegin() noexcept; + constexpr PkgIterator PkgEnd() noexcept; + inline PkgFileIterator FileBegin() noexcept; + constexpr PkgFileIterator FileEnd() noexcept; + inline RlsFileIterator RlsFileBegin() noexcept; + constexpr RlsFileIterator RlsFileEnd() noexcept; - inline bool MultiArchCache() const { return MultiArchEnabled; } - inline char const * NativeArch(); + constexpr bool MultiArchCache() const noexcept { return MultiArchEnabled; } + constexpr char const * NativeArch() const noexcept; // Make me a function pkgVersioningSystem *VS; @@ -822,29 +822,29 @@ struct pkgCache::Provides }; /*}}}*/ -inline char const * pkgCache::NativeArch() +constexpr char const * pkgCache::NativeArch() const noexcept { return StrP + HeaderP->Architecture; } #include <apt-pkg/cacheiterators.h> - inline pkgCache::GrpIterator pkgCache::GrpBegin() + inline pkgCache::GrpIterator pkgCache::GrpBegin() noexcept { return GrpIterator(*this); } - inline pkgCache::GrpIterator pkgCache::GrpEnd() + constexpr pkgCache::GrpIterator pkgCache::GrpEnd() noexcept { return GrpIterator(*this, GrpP);} -inline pkgCache::PkgIterator pkgCache::PkgBegin() +inline pkgCache::PkgIterator pkgCache::PkgBegin() noexcept {return PkgIterator(*this);} -inline pkgCache::PkgIterator pkgCache::PkgEnd() +constexpr pkgCache::PkgIterator pkgCache::PkgEnd() noexcept {return PkgIterator(*this,PkgP);} -inline pkgCache::PkgFileIterator pkgCache::FileBegin() +inline pkgCache::PkgFileIterator pkgCache::FileBegin() noexcept {return PkgFileIterator(*this,PkgFileP + HeaderP->FileList);} -inline pkgCache::PkgFileIterator pkgCache::FileEnd() +constexpr pkgCache::PkgFileIterator pkgCache::FileEnd() noexcept {return PkgFileIterator(*this,PkgFileP);} -inline pkgCache::RlsFileIterator pkgCache::RlsFileBegin() +inline pkgCache::RlsFileIterator pkgCache::RlsFileBegin() noexcept {return RlsFileIterator(*this,RlsFileP + HeaderP->RlsFileList);} -inline pkgCache::RlsFileIterator pkgCache::RlsFileEnd() +constexpr pkgCache::RlsFileIterator pkgCache::RlsFileEnd() noexcept {return RlsFileIterator(*this,RlsFileP);} |
