CommonLibSSE (Parapets fork)
Loading...
Searching...
No Matches
FxResponseArgs.h
Go to the documentation of this file.
1#pragma once
2
4#include "RE/G/GFxValue.h"
5
6namespace RE
7{
8 template <std::uint32_t SIZE>
10 {
11 public:
14 _values{},
15 _index(1),
16 _pad(0)
17 {}
18
19 ~FxResponseArgs() override = default; // 00
20
21 // override (FxResponseArgsBase)
22 std::uint32_t GetValues(GFxValue** a_params) override // 01
23 {
24 *a_params = _values;
25 return _index;
26 }
27
28 void Add(const GFxValue& a_val)
29 {
30 if (_index > SIZE) {
31 assert(false); // insertion out of bounds
32 return;
33 }
34 _values[_index++] = a_val;
35 }
36
37 private:
38 GFxValue _values[SIZE + 1]; // 08 - includes response data
39 std::uint32_t _index; // ??
40 std::uint32_t _pad; // ??
41 };
42 static_assert(sizeof(FxResponseArgs<1>) == 0x40);
43
44 template <std::size_t N>
46 {
47 private:
48 static constexpr std::size_t O = 1;
49
51 using container_type = std::array<GFxValue, N + O>;
52
53 static_assert(N + O <= static_cast<std::size_t>(std::numeric_limits<std::uint32_t>::max()));
54
55 public:
56 using value_type = typename container_type::value_type;
57 using size_type = typename container_type::size_type;
58 using difference_type = typename container_type::difference_type;
59 using reference = typename container_type::reference;
60 using const_reference = typename container_type::const_reference;
61 using pointer = typename container_type::pointer;
62 using const_pointer = typename container_type::const_pointer;
63 using iterator = typename container_type::iterator;
64 using const_iterator = typename container_type::const_iterator;
65 using reverse_iterator = typename container_type::reverse_iterator;
66 using const_reverse_iterator = typename container_type::const_reverse_iterator;
67
69 super(),
70 _args()
71 {}
72
75
76 FxResponseArgsEx(const std::array<GFxValue, N>& a_args) :
77 super(),
78 _args()
79 {
80 for (std::size_t i = 0; i < N; ++i) {
81 _args[i + O] = a_args[i];
82 }
83 }
84
85 FxResponseArgsEx(std::array<GFxValue, N>&& a_args) :
86 super(),
87 _args()
88 {
89 for (std::size_t i = 0; i < N; ++i) {
90 _args[i + O] = std::move(a_args[i]);
91 }
92 }
93
94 ~FxResponseArgsEx() override = default;
95
98
99 [[nodiscard]] constexpr reference at(size_type a_pos) { return _args.at(a_pos); }
100 [[nodiscard]] constexpr const_reference at(size_type a_pos) const { return _args.at(a_pos); }
101
102 [[nodiscard]] constexpr reference operator[](size_type a_pos) { return _args[a_pos + O]; }
103 [[nodiscard]] constexpr const_reference operator[](size_type a_pos) const { return _args[a_pos + O]; }
104
105 [[nodiscard]] constexpr reference front() { return _args.front(); }
106 [[nodiscard]] constexpr const_reference front() const { return _args.front(); }
107
108 [[nodiscard]] constexpr reference back() { return _args.back(); }
109 [[nodiscard]] constexpr const_reference back() const { return _args.back(); }
110
111 [[nodiscard]] constexpr pointer data() noexcept { return _args.data(); }
112 [[nodiscard]] constexpr const_pointer data() const noexcept { return _args.data(); }
113
114 [[nodiscard]] constexpr iterator begin() noexcept { return ++_args.begin(); }
115 [[nodiscard]] constexpr const_iterator begin() const noexcept { return ++_args.begin(); }
116 [[nodiscard]] constexpr const_iterator cbegin() const noexcept { return ++_args.cbegin(); }
117
118 [[nodiscard]] constexpr iterator end() noexcept { return _args.end(); }
119 [[nodiscard]] constexpr const_iterator end() const noexcept { return _args.end(); }
120 [[nodiscard]] constexpr const_iterator cend() const noexcept { return _args.cend(); }
121
122 [[nodiscard]] constexpr reverse_iterator rbegin() noexcept { return _args.rbegin(); }
123 [[nodiscard]] constexpr const_reverse_iterator rbegin() const noexcept { return _args.rbegin(); }
124 [[nodiscard]] constexpr const_reverse_iterator crbegin() const noexcept { return _args.crbegin(); }
125
126 [[nodiscard]] constexpr reverse_iterator rend() noexcept { return --_args.rend(); }
127 [[nodiscard]] constexpr const_reverse_iterator rend() const noexcept { return --_args.rend(); }
128 [[nodiscard]] constexpr const_reverse_iterator crend() const noexcept { return --_args.crend(); }
129
130 [[nodiscard]] constexpr bool empty() const noexcept { return begin() == end(); }
131
132 [[nodiscard]] constexpr size_type size() const noexcept { return _args.size() - O; }
133
134 [[nodiscard]] constexpr size_type max_size() const noexcept { return size(); }
135
136 protected:
137 std::uint32_t GetValues(GFxValue** a_params) override // 01
138 {
139 *a_params = _args.data();
140 return static_cast<std::uint32_t>(_args.size());
141 }
142
143 private:
144 container_type _args;
145 };
146
147 template <std::size_t N>
148 FxResponseArgsEx(const std::array<GFxValue, N>&) -> FxResponseArgsEx<N>;
149
150 template <std::size_t N>
151 FxResponseArgsEx(std::array<GFxValue, N>&&) -> FxResponseArgsEx<N>;
152}
Definition: FxResponseArgsBase.h:8
FxResponseArgsBase()=default
Definition: FxResponseArgs.h:46
FxResponseArgsEx(const FxResponseArgsEx &)=default
FxResponseArgsEx(const std::array< GFxValue, N > &a_args)
Definition: FxResponseArgs.h:76
constexpr iterator begin() noexcept
Definition: FxResponseArgs.h:114
constexpr const_iterator cbegin() const noexcept
Definition: FxResponseArgs.h:116
constexpr const_reverse_iterator rbegin() const noexcept
Definition: FxResponseArgs.h:123
constexpr const_reference at(size_type a_pos) const
Definition: FxResponseArgs.h:100
constexpr size_type max_size() const noexcept
Definition: FxResponseArgs.h:134
FxResponseArgsEx()
Definition: FxResponseArgs.h:68
typename container_type::const_reverse_iterator const_reverse_iterator
Definition: FxResponseArgs.h:66
constexpr reference front()
Definition: FxResponseArgs.h:105
typename container_type::reverse_iterator reverse_iterator
Definition: FxResponseArgs.h:65
~FxResponseArgsEx() override=default
constexpr const_iterator begin() const noexcept
Definition: FxResponseArgs.h:115
constexpr const_reverse_iterator crbegin() const noexcept
Definition: FxResponseArgs.h:124
constexpr reference at(size_type a_pos)
Definition: FxResponseArgs.h:99
FxResponseArgsEx(std::array< GFxValue, N > &&a_args)
Definition: FxResponseArgs.h:85
typename container_type::value_type value_type
Definition: FxResponseArgs.h:56
typename container_type::size_type size_type
Definition: FxResponseArgs.h:57
FxResponseArgsEx & operator=(const FxResponseArgsEx &)=default
constexpr pointer data() noexcept
Definition: FxResponseArgs.h:111
typename container_type::iterator iterator
Definition: FxResponseArgs.h:63
constexpr reference operator[](size_type a_pos)
Definition: FxResponseArgs.h:102
typename container_type::const_reference const_reference
Definition: FxResponseArgs.h:60
constexpr size_type size() const noexcept
Definition: FxResponseArgs.h:132
constexpr const_reference back() const
Definition: FxResponseArgs.h:109
std::uint32_t GetValues(GFxValue **a_params) override
Definition: FxResponseArgs.h:137
constexpr iterator end() noexcept
Definition: FxResponseArgs.h:118
typename container_type::difference_type difference_type
Definition: FxResponseArgs.h:58
constexpr const_pointer data() const noexcept
Definition: FxResponseArgs.h:112
FxResponseArgsEx(FxResponseArgsEx &&)=default
constexpr reference back()
Definition: FxResponseArgs.h:108
typename container_type::const_iterator const_iterator
Definition: FxResponseArgs.h:64
FxResponseArgsEx & operator=(FxResponseArgsEx &&)=default
constexpr bool empty() const noexcept
Definition: FxResponseArgs.h:130
typename container_type::reference reference
Definition: FxResponseArgs.h:59
constexpr const_reference front() const
Definition: FxResponseArgs.h:106
constexpr const_iterator cend() const noexcept
Definition: FxResponseArgs.h:120
constexpr const_reference operator[](size_type a_pos) const
Definition: FxResponseArgs.h:103
constexpr const_reverse_iterator crend() const noexcept
Definition: FxResponseArgs.h:128
constexpr const_iterator end() const noexcept
Definition: FxResponseArgs.h:119
constexpr const_reverse_iterator rend() const noexcept
Definition: FxResponseArgs.h:127
typename container_type::const_pointer const_pointer
Definition: FxResponseArgs.h:62
constexpr reverse_iterator rend() noexcept
Definition: FxResponseArgs.h:126
constexpr reverse_iterator rbegin() noexcept
Definition: FxResponseArgs.h:122
typename container_type::pointer pointer
Definition: FxResponseArgs.h:61
Definition: FxResponseArgs.h:10
std::uint32_t GetValues(GFxValue **a_params) override
Definition: FxResponseArgs.h:22
~FxResponseArgs() override=default
void Add(const GFxValue &a_val)
Definition: FxResponseArgs.h:28
FxResponseArgs()
Definition: FxResponseArgs.h:12
Definition: GFxValue.h:90
Definition: AbsorbEffect.h:6