Files
st/libs/cpp/include/algorithm
T
Yanis b116e79e9f Decompile overlay 1 (Part 2) (#91)
* UnkStruct_027e09b8_001 OK

* match func_ov001_020b7830

* fix build issues

* UnkStruct_027e0cd8_001 49%

* UnkStruct_027e0cd8_001 OK

* fix build issues

* UnkStruct_027e0cd8_0C_001 92%

* port some MSL C++ headers from rb3 and key decomps

* fix build issues

* UnkStruct_027e0cd8_0C_001 98%
2026-06-28 15:29:34 +02:00

84 lines
2.2 KiB
Plaintext

#ifndef _STD_ALGORITHM_H
#define _STD_ALGORITHM_H
// from rb3/key decomp
#include <msl_unk.hpp>
namespace std {
template <class T> inline const T &min(const T &a, const T &b) {
return b < a ? b : a;
}
template <class T> inline const T &max(const T &a, const T &b) {
return a < b ? b : a;
}
template <class T, class _Compare> inline const T &min(const T &a, const T &b, _Compare comp) {
return comp(b, a) ? b : a;
}
template <class T, class _Compare> inline const T &max(const T &a, const T &b, _Compare comp) {
return comp(a, b) ? b : a;
}
template <typename InputIterator, typename Predicate>
inline InputIterator find_if(InputIterator first, InputIterator last, Predicate p) {
for (; first != last && !p(*first); ++first) {
}
return first;
}
template <typename It, typename T> inline It find(It first, It last, const T &value) {
while (first != last && *first != value) {
first++;
}
return first;
}
// adapted from https://github.com/matta/sgi-stl/blob/635eaeef4533214ec140fb17411558ad441d2996/stl/stl_algo.h#L638
template <typename It, typename T> inline It remove(It first, It last, const T &value) {
first = find(first, last, value);
if (first != last) {
It it = first;
for (it++; it != last; it++) {
if (*it != value) {
*first = *it;
first++;
}
}
}
return first;
}
template <typename T, typename Size, bool V /* ? */> struct __fill_n {
static inline void fill_n(T *first, Size n, const T &value) {
for (; n != 0; first++, n--) {
*first = value;
}
}
};
template <typename OutputIt /* ? */, typename Size, typename T>
inline void fill_n(OutputIt *first, Size n, const T &value) {
__fill_n<OutputIt, Size, false>::fill_n(first, n, value);
}
template <typename T> inline T &move(T &p) {
return p;
}
template <typename T> inline void swap(T &a, T &b) {
T temp = move(a);
a = move(b);
b = move(temp);
}
} // namespace std
#endif