diff options
| author | 2020-08-14 09:38:45 -0400 | |
|---|---|---|
| committer | 2020-08-15 17:17:52 -0400 | |
| commit | df7248039553b3ebd338380c3ef0428b0e046e79 (patch) | |
| tree | eca7153300e311ac7954f5c085fdada0c7295699 /src/common/multi_level_queue.h | |
| parent | Merge pull request #4526 from lioncash/core-semi (diff) | |
| download | yuzu-df7248039553b3ebd338380c3ef0428b0e046e79.tar.gz yuzu-df7248039553b3ebd338380c3ef0428b0e046e79.tar.xz yuzu-df7248039553b3ebd338380c3ef0428b0e046e79.zip | |
common: Make use of [[nodiscard]] where applicable
Now that clang-format makes [[nodiscard]] attributes format sensibly, we
can apply them to several functions within the common library to allow
the compiler to complain about any misuses of the functions.
Diffstat (limited to '')
| -rw-r--r-- | src/common/multi_level_queue.h | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/common/multi_level_queue.h b/src/common/multi_level_queue.h index 50acfdbf2..4b305bf40 100644 --- a/src/common/multi_level_queue.h +++ b/src/common/multi_level_queue.h | |||
| @@ -223,15 +223,15 @@ public: | |||
| 223 | ListShiftForward(levels[priority], n); | 223 | ListShiftForward(levels[priority], n); |
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | std::size_t depth() const { | 226 | [[nodiscard]] std::size_t depth() const { |
| 227 | return Depth; | 227 | return Depth; |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | std::size_t size(u32 priority) const { | 230 | [[nodiscard]] std::size_t size(u32 priority) const { |
| 231 | return levels[priority].size(); | 231 | return levels[priority].size(); |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | std::size_t size() const { | 234 | [[nodiscard]] std::size_t size() const { |
| 235 | u64 priorities = used_priorities; | 235 | u64 priorities = used_priorities; |
| 236 | std::size_t size = 0; | 236 | std::size_t size = 0; |
| 237 | while (priorities != 0) { | 237 | while (priorities != 0) { |
| @@ -242,64 +242,64 @@ public: | |||
| 242 | return size; | 242 | return size; |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | bool empty() const { | 245 | [[nodiscard]] bool empty() const { |
| 246 | return used_priorities == 0; | 246 | return used_priorities == 0; |
| 247 | } | 247 | } |
| 248 | 248 | ||
| 249 | bool empty(u32 priority) const { | 249 | [[nodiscard]] bool empty(u32 priority) const { |
| 250 | return (used_priorities & (1ULL << priority)) == 0; | 250 | return (used_priorities & (1ULL << priority)) == 0; |
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | u32 highest_priority_set(u32 max_priority = 0) const { | 253 | [[nodiscard]] u32 highest_priority_set(u32 max_priority = 0) const { |
| 254 | const u64 priorities = | 254 | const u64 priorities = |
| 255 | max_priority == 0 ? used_priorities : (used_priorities & ~((1ULL << max_priority) - 1)); | 255 | max_priority == 0 ? used_priorities : (used_priorities & ~((1ULL << max_priority) - 1)); |
| 256 | return priorities == 0 ? Depth : static_cast<u32>(CountTrailingZeroes64(priorities)); | 256 | return priorities == 0 ? Depth : static_cast<u32>(CountTrailingZeroes64(priorities)); |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | u32 lowest_priority_set(u32 min_priority = Depth - 1) const { | 259 | [[nodiscard]] u32 lowest_priority_set(u32 min_priority = Depth - 1) const { |
| 260 | const u64 priorities = min_priority >= Depth - 1 | 260 | const u64 priorities = min_priority >= Depth - 1 |
| 261 | ? used_priorities | 261 | ? used_priorities |
| 262 | : (used_priorities & ((1ULL << (min_priority + 1)) - 1)); | 262 | : (used_priorities & ((1ULL << (min_priority + 1)) - 1)); |
| 263 | return priorities == 0 ? Depth : 63 - CountLeadingZeroes64(priorities); | 263 | return priorities == 0 ? Depth : 63 - CountLeadingZeroes64(priorities); |
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | const_iterator cbegin(u32 max_prio = 0) const { | 266 | [[nodiscard]] const_iterator cbegin(u32 max_prio = 0) const { |
| 267 | const u32 priority = highest_priority_set(max_prio); | 267 | const u32 priority = highest_priority_set(max_prio); |
| 268 | return priority == Depth ? cend() | 268 | return priority == Depth ? cend() |
| 269 | : const_iterator{*this, levels[priority].cbegin(), priority}; | 269 | : const_iterator{*this, levels[priority].cbegin(), priority}; |
| 270 | } | 270 | } |
| 271 | const_iterator begin(u32 max_prio = 0) const { | 271 | [[nodiscard]] const_iterator begin(u32 max_prio = 0) const { |
| 272 | return cbegin(max_prio); | 272 | return cbegin(max_prio); |
| 273 | } | 273 | } |
| 274 | iterator begin(u32 max_prio = 0) { | 274 | [[nodiscard]] iterator begin(u32 max_prio = 0) { |
| 275 | const u32 priority = highest_priority_set(max_prio); | 275 | const u32 priority = highest_priority_set(max_prio); |
| 276 | return priority == Depth ? end() : iterator{*this, levels[priority].begin(), priority}; | 276 | return priority == Depth ? end() : iterator{*this, levels[priority].begin(), priority}; |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | const_iterator cend(u32 min_prio = Depth - 1) const { | 279 | [[nodiscard]] const_iterator cend(u32 min_prio = Depth - 1) const { |
| 280 | return min_prio == Depth - 1 ? const_iterator{*this, Depth} : cbegin(min_prio + 1); | 280 | return min_prio == Depth - 1 ? const_iterator{*this, Depth} : cbegin(min_prio + 1); |
| 281 | } | 281 | } |
| 282 | const_iterator end(u32 min_prio = Depth - 1) const { | 282 | [[nodiscard]] const_iterator end(u32 min_prio = Depth - 1) const { |
| 283 | return cend(min_prio); | 283 | return cend(min_prio); |
| 284 | } | 284 | } |
| 285 | iterator end(u32 min_prio = Depth - 1) { | 285 | [[nodiscard]] iterator end(u32 min_prio = Depth - 1) { |
| 286 | return min_prio == Depth - 1 ? iterator{*this, Depth} : begin(min_prio + 1); | 286 | return min_prio == Depth - 1 ? iterator{*this, Depth} : begin(min_prio + 1); |
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | T& front(u32 max_priority = 0) { | 289 | [[nodiscard]] T& front(u32 max_priority = 0) { |
| 290 | const u32 priority = highest_priority_set(max_priority); | 290 | const u32 priority = highest_priority_set(max_priority); |
| 291 | return levels[priority == Depth ? 0 : priority].front(); | 291 | return levels[priority == Depth ? 0 : priority].front(); |
| 292 | } | 292 | } |
| 293 | const T& front(u32 max_priority = 0) const { | 293 | [[nodiscard]] const T& front(u32 max_priority = 0) const { |
| 294 | const u32 priority = highest_priority_set(max_priority); | 294 | const u32 priority = highest_priority_set(max_priority); |
| 295 | return levels[priority == Depth ? 0 : priority].front(); | 295 | return levels[priority == Depth ? 0 : priority].front(); |
| 296 | } | 296 | } |
| 297 | 297 | ||
| 298 | T back(u32 min_priority = Depth - 1) { | 298 | [[nodiscard]] T& back(u32 min_priority = Depth - 1) { |
| 299 | const u32 priority = lowest_priority_set(min_priority); // intended | 299 | const u32 priority = lowest_priority_set(min_priority); // intended |
| 300 | return levels[priority == Depth ? 63 : priority].back(); | 300 | return levels[priority == Depth ? 63 : priority].back(); |
| 301 | } | 301 | } |
| 302 | const T& back(u32 min_priority = Depth - 1) const { | 302 | [[nodiscard]] const T& back(u32 min_priority = Depth - 1) const { |
| 303 | const u32 priority = lowest_priority_set(min_priority); // intended | 303 | const u32 priority = lowest_priority_set(min_priority); // intended |
| 304 | return levels[priority == Depth ? 63 : priority].back(); | 304 | return levels[priority == Depth ? 63 : priority].back(); |
| 305 | } | 305 | } |
| @@ -329,7 +329,8 @@ private: | |||
| 329 | in_list.splice(position, out_list, element); | 329 | in_list.splice(position, out_list, element); |
| 330 | } | 330 | } |
| 331 | 331 | ||
| 332 | static const_list_iterator ListIterateTo(const std::list<T>& list, const T& element) { | 332 | [[nodiscard]] static const_list_iterator ListIterateTo(const std::list<T>& list, |
| 333 | const T& element) { | ||
| 333 | auto it = list.cbegin(); | 334 | auto it = list.cbegin(); |
| 334 | while (it != list.cend() && *it != element) { | 335 | while (it != list.cend() && *it != element) { |
| 335 | ++it; | 336 | ++it; |