/* * This file is part of the DXX-Rebirth project . * It is copyright by its individual contributors, as recorded in the * project's Git history. See COPYING.txt at the top level for license * terms and a link to the Git history. */ #pragma once #include typedef char file_extension_t[5]; #ifdef __cplusplus #include #include #include "null_sentinel_iterator.h" #include "dxxsconf.h" #include "compiler-array.h" class PHYSFS_list_deleter { public: void operator()(char **list) const { PHYSFS_freeList(list); } }; template class PHYSFSX_uncounted_list_template : public std::unique_ptr { typedef std::unique_ptr base_ptr; public: typedef null_sentinel_iterator const_iterator; DXX_INHERIT_CONSTRUCTORS(PHYSFSX_uncounted_list_template, base_ptr); const_iterator begin() const { return this->get(); } const_iterator end() const { return {}; } }; template class PHYSFSX_counted_list_template : public PHYSFSX_uncounted_list_template { typedef PHYSFSX_uncounted_list_template base_ptr; typedef typename base_ptr::pointer pointer; uint_fast32_t count; public: PHYSFSX_counted_list_template() = default; PHYSFSX_counted_list_template(char **p) : base_ptr(p), count(0) { } uint_fast32_t get_count() const { return count; } void set_count(uint_fast32_t c) { count = c; } void reset() { base_ptr::reset(); } void reset(pointer p) { count = 0; base_ptr::reset(p); } }; typedef PHYSFSX_uncounted_list_template PHYSFSX_uncounted_list; typedef PHYSFSX_counted_list_template PHYSFSX_counted_list; __attribute_nonnull() __attribute_warn_unused_result PHYSFSX_uncounted_list PHYSFSX_findFiles(const char *path, const file_extension_t *exts, uint_fast32_t count); template __attribute_nonnull() __attribute_warn_unused_result static inline PHYSFSX_uncounted_list PHYSFSX_findFiles(const char *path, const array &exts) { return PHYSFSX_findFiles(path, exts.data(), count); } __attribute_nonnull() __attribute_warn_unused_result PHYSFSX_uncounted_list PHYSFSX_findabsoluteFiles(const char *path, const char *realpath, const file_extension_t *exts, uint_fast32_t count); template __attribute_nonnull() __attribute_warn_unused_result static inline PHYSFSX_uncounted_list PHYSFSX_findabsoluteFiles(const char *path, const char *realpath, const array &exts) { return PHYSFSX_findabsoluteFiles(path, realpath, exts.data(), count); } #endif