forked from OctaForge/libcubescript
useful funcs to alloc resources for internal use
parent
56b2a86640
commit
35ebb0e822
53
src/cs_vm.hh
53
src/cs_vm.hh
|
@ -111,6 +111,59 @@ struct CsErrorException {
|
|||
{}
|
||||
};
|
||||
|
||||
inline void *cs_alloc_throw(
|
||||
CsState &cs, void *ptr, ostd::Size olds, ostd::Size news
|
||||
) {
|
||||
void *ret = cs.alloc(ptr, olds, news);
|
||||
if (news && !ret) {
|
||||
cs.error("could not allocate memory");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<typename T, typename ...A>
|
||||
inline T *cs_new(CsState &cs, A &&...args) {
|
||||
void *ret = cs.alloc(nullptr, 0, sizeof(T));
|
||||
if (!ret) {
|
||||
return nullptr;
|
||||
}
|
||||
new (ret) T(ostd::forward<A>(args)...);
|
||||
return static_cast<T *>(ret);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T *cs_new_array(CsState &cs, ostd::Size len) {
|
||||
T *ret = static_cast<T *>(cs.alloc(nullptr, 0, len * sizeof(T)));
|
||||
if (ret) {
|
||||
for (ostd::Size i = 0; i < len; ++i) {
|
||||
new (&ret[i]) T();
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<typename T, typename ...A>
|
||||
inline T *cs_new_throw(CsState &cs, A &&...args) {
|
||||
void *ret = cs_alloc_throw(cs, nullptr, 0, sizeof(T));
|
||||
new (ret) T(ostd::forward<A>(args)...);
|
||||
return static_cast<T *>(ret);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T *cs_new_array_throw(CsState &cs, ostd::Size len) {
|
||||
T *ret = static_cast<T *>(cs_alloc_throw(cs, nullptr, 0, len * sizeof(T)));
|
||||
for (ostd::Size i = 0; i < len; ++i) {
|
||||
new (&ret[i]) T();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void cs_delete(CsState &cs, T *v) noexcept {
|
||||
v->~T();
|
||||
cs.alloc(v, sizeof(T), 0);
|
||||
}
|
||||
|
||||
CsStackState cs_save_stack(CsState &cs);
|
||||
|
||||
template<typename ...A>
|
||||
|
|
Loading…
Reference in New Issue