Pioneer
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1// Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _UTILS_H
5#define _UTILS_H
6
7#include "core/Log.h"
8#include "core/StringUtils.h"
9#include "core/macros.h"
10
11#include "profiler/Profiler.h"
12
13// An adaptor for automagic reverse range-for iteration of containers
14// One might be able to specialize this for raw arrays, but that's beyond the
15// point of its use-case.
16// One might also point out that this is surely more work to code than simply
17// writing an explicit iterator loop, to which I say: bah humbug!
18template <typename T>
20 using iterator = typename T::reverse_iterator;
21 using const_iterator = typename T::const_reverse_iterator;
22
23 using value_type = typename std::remove_reference<T>::type;
24
26 ref(ref) {}
27
28 iterator begin() { return ref.rbegin(); }
29 const_iterator begin() const { return ref.crbegin(); }
30
31 iterator end() { return ref.rend(); }
32 const_iterator end() const { return ref.crend(); }
33
34private:
35 value_type &ref;
36};
37
38// Use this function for automatic template parameter deduction
39template <typename T>
41
42#endif /* _UTILS_H */
Definition: utils.h:19
reverse_container_t(value_type &ref)
Definition: utils.h:25
iterator end()
Definition: utils.h:31
typename T::reverse_iterator iterator
Definition: utils.h:20
const_iterator end() const
Definition: utils.h:32
typename std::remove_reference< T >::type value_type
Definition: utils.h:23
const_iterator begin() const
Definition: utils.h:29
iterator begin()
Definition: utils.h:28
typename T::const_reverse_iterator const_iterator
Definition: utils.h:21
reverse_container_t< T > reverse_container(T &ref)
Definition: utils.h:40