diff --git a/src/utils/misc.h b/src/utils/misc.h index cf7cd0513..12d69b72b 100644 --- a/src/utils/misc.h +++ b/src/utils/misc.h @@ -75,25 +75,6 @@ void print_module_usage(const char *module_name, const struct key_val *options, #ifdef __cplusplus uint32_t parse_uint32(const char *value_str) noexcept(false); - -#include - -template struct ref_count_init_once { - std::optional operator()(T (*init)(void), int &i) { - if (i++ == 0) { - return std::optional(init()); - } - return std::nullopt; - } -}; - -struct ref_count_terminate_last { - void operator()(void (*terminate)(void), int &i) { - if (--i == 0) { - terminate(); - } - } -}; #endif //__cplusplus #endif// UTILS_MISC_H_ diff --git a/src/utils/ref_count.hpp b/src/utils/ref_count.hpp new file mode 100644 index 000000000..626906d10 --- /dev/null +++ b/src/utils/ref_count.hpp @@ -0,0 +1,61 @@ +/** + * @file utils/ref_count.hpp + * @author Martin Pulec + */ +/* + * Copyright (c) 2022 CESNET z.s.p.o. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, is permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of CESNET nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef UTILS_REF_COUNT_H_0FC2C86B_8E95_45EF_AADE_F0A5C4ECBC31 +#define UTILS_REF_COUNT_H_0FC2C86B_8E95_45EF_AADE_F0A5C4ECBC31 + +#include + +template struct ref_count_init_once { + std::optional operator()(T (*init)(void), int &i) { + if (i++ == 0) { + return std::optional(init()); + } + return std::nullopt; + } +}; + +struct ref_count_terminate_last { + void operator()(void (*terminate)(void), int &i) { + if (--i == 0) { + terminate(); + } + } +}; + +#endif // defined UTILS_REF_COUNT_H_0FC2C86B_8E95_45EF_AADE_F0A5C4ECBC31 + diff --git a/src/video_display/gl.cpp b/src/video_display/gl.cpp index ac5348a1b..66c7b6e60 100644 --- a/src/video_display/gl.cpp +++ b/src/video_display/gl.cpp @@ -79,7 +79,7 @@ #include "module.h" #include "utils/color_out.h" #include "utils/macros.h" // OPTIMIZED_FOR -#include "utils/misc.h" +#include "utils/ref_count.hpp" #include "video.h" #include "video_display.h" #include "video_display/splashscreen.h"