/* * 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 "dsx-ns.h" #include "compiler-array.h" #include "fwd-partial_range.h" namespace dcx { class PHYSFS_list_deleter { public: void operator()(char **list) const { PHYSFS_freeList(list); } }; template class PHYSFSX_uncounted_list_template : public std::unique_ptr { public: typedef null_sentinel_iterator const_iterator; DXX_INHERIT_CONSTRUCTORS(PHYSFSX_uncounted_list_template, std::unique_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; using typename base_ptr::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, partial_range_t exts); __attribute_nonnull() __attribute_warn_unused_result PHYSFSX_uncounted_list PHYSFSX_findabsoluteFiles(const char *path, const char *realpath, const partial_range_t exts); } #endif