except: add try_array
This commit is contained in:
parent
83e7621b40
commit
9a07fc2496
33
except.hpp
33
except.hpp
@ -12,7 +12,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*
|
*
|
||||||
* Copyright:
|
* Copyright:
|
||||||
* 2016, Danny Robson <danny@nerdcruft.net>
|
* 2016-2017, Danny Robson <danny@nerdcruft.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CRUFT_VK_EXCEPT_HPP
|
#ifndef CRUFT_VK_EXCEPT_HPP
|
||||||
@ -20,6 +20,9 @@
|
|||||||
|
|
||||||
#include "./vk.hpp"
|
#include "./vk.hpp"
|
||||||
|
|
||||||
|
#include <cruft/util/debug.hpp>
|
||||||
|
#include <cruft/util/types/traits.hpp>
|
||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
@ -42,7 +45,7 @@ namespace cruft::vk {
|
|||||||
try_func (FuncT &&func, Args &&...args)
|
try_func (FuncT &&func, Args &&...args)
|
||||||
{
|
{
|
||||||
static_assert(std::is_same_v<
|
static_assert(std::is_same_v<
|
||||||
std::result_of_t<FuncT(Args...)>,
|
typename func_traits<FuncT>::return_type,
|
||||||
VkResult
|
VkResult
|
||||||
>);
|
>);
|
||||||
|
|
||||||
@ -61,6 +64,32 @@ namespace cruft::vk {
|
|||||||
try_func (func, std::forward<Args> (args)..., &value);
|
try_func (func, std::forward<Args> (args)..., &value);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <
|
||||||
|
template <typename...> class ContainerT,
|
||||||
|
typename FuncT,
|
||||||
|
typename ...Args
|
||||||
|
>
|
||||||
|
static auto
|
||||||
|
try_array (FuncT &&func, Args &&...args)
|
||||||
|
{
|
||||||
|
uint32_t expected = 0;
|
||||||
|
try_func (func, args..., &expected, nullptr);
|
||||||
|
|
||||||
|
using ResultT = std::remove_pointer_t<
|
||||||
|
std::tuple_element_t<
|
||||||
|
sizeof...(Args) + 1,
|
||||||
|
typename func_traits<FuncT>::argument_types
|
||||||
|
>
|
||||||
|
>;
|
||||||
|
|
||||||
|
ContainerT<ResultT> values (expected);
|
||||||
|
uint32_t found = 0;
|
||||||
|
try_func (func, args..., &found, std::data (values));
|
||||||
|
CHECK_EQ (expected, found);
|
||||||
|
return values;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user