The open source OpenXR runtime
at prediction-2 61 lines 4.9 kB view raw
1// Copyright 2022, Collabora, Ltd. 2// SPDX-License-Identifier: BSL-1.0 3/*! 4 * @file 5 * @brief Expose std::deque to C 6 * @author Mateo de Mayo <mateo.demayo@collabora.com> 7 * @ingroup aux_util 8 */ 9 10#include "u_deque.h" 11#include "util/u_time.h" 12#include <deque> 13 14using std::deque; 15 16#define U_DEQUE_IMPLEMENTATION(TYPE) \ 17 u_deque_##TYPE u_deque_##TYPE##_create() \ 18 { \ 19 u_deque_##TYPE ud{new deque<TYPE>}; \ 20 return ud; \ 21 } \ 22 \ 23 void u_deque_##TYPE##_push_back(u_deque_##TYPE ud, TYPE e) \ 24 { \ 25 deque<TYPE> *d = static_cast<deque<TYPE> *>(ud.ptr); \ 26 d->push_back(e); \ 27 } \ 28 \ 29 bool u_deque_##TYPE##_pop_front(u_deque_##TYPE ud, TYPE *e) \ 30 { \ 31 deque<TYPE> *d = static_cast<deque<TYPE> *>(ud.ptr); \ 32 bool pop = !d->empty(); \ 33 if (pop) { \ 34 *e = d->front(); \ 35 d->erase(d->begin()); \ 36 } \ 37 return pop; \ 38 } \ 39 \ 40 TYPE u_deque_##TYPE##_at(u_deque_##TYPE ud, size_t i) \ 41 { \ 42 deque<TYPE> *d = static_cast<deque<TYPE> *>(ud.ptr); \ 43 return d->at(i); \ 44 } \ 45 \ 46 size_t u_deque_##TYPE##_size(u_deque_##TYPE ud) \ 47 { \ 48 deque<TYPE> *d = static_cast<deque<TYPE> *>(ud.ptr); \ 49 return d->size(); \ 50 } \ 51 \ 52 void u_deque_##TYPE##_destroy(u_deque_##TYPE *ud) \ 53 { \ 54 deque<TYPE> *d = static_cast<deque<TYPE> *>(ud->ptr); \ 55 delete d; \ 56 ud->ptr = nullptr; \ 57 } 58 59extern "C" { 60U_DEQUE_IMPLEMENTATION(timepoint_ns) 61}