12#ifndef CMSIS_PLUS_POSIX_IO_DIRECTORY_H_
13#define CMSIS_PLUS_POSIX_IO_DIRECTORY_H_
17#if defined(__cplusplus)
21#if defined(OS_USE_OS_APP_CONFIG_H)
22#include <cmsis-plus/os-app-config.h>
34#pragma GCC diagnostic push
36#pragma clang diagnostic ignored "-Wc++98-compat"
37#pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
56#pragma GCC diagnostic push
58#pragma clang diagnostic ignored "-Wpadded"
59#elif defined(__GNUC__)
60#pragma GCC diagnostic ignored "-Wpadded"
68#pragma GCC diagnostic push
70#elif defined(__GNUC__)
71#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
72#pragma GCC diagnostic ignored "-Wsuggest-final-types"
146#pragma GCC diagnostic push
147#if defined(__clang__)
148#elif defined(__GNUC__)
149#pragma GCC diagnostic ignored "-Wredundant-tags"
155#pragma GCC diagnostic pop
190#pragma GCC diagnostic pop
268#pragma GCC diagnostic push
269#if defined(__clang__)
270#elif defined(__GNUC__)
271#pragma GCC diagnostic ignored "-Wredundant-tags"
277#pragma GCC diagnostic pop
301#pragma GCC diagnostic push
302#if defined(__clang__)
303#elif defined(__GNUC__)
304#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
305#pragma GCC diagnostic ignored "-Wsuggest-final-types"
307 template <
typename T>
376#pragma GCC diagnostic pop
380#pragma GCC diagnostic push
381#if defined(__clang__)
382#elif defined(__GNUC__)
383#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
384#pragma GCC diagnostic ignored "-Wsuggest-final-types"
386 template <
typename T,
typename L>
440 read (
void)
override;
448 close (
void)
override;
474#pragma GCC diagnostic pop
476#pragma GCC diagnostic pop
499 return &(
impl ().dir_entry_);
518 template <
typename T>
524#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
525 trace::printf (
"directory_implementable::%s()=@%p\n", __func__,
this);
529#pragma GCC diagnostic push
530#if defined(__clang__)
531#elif defined(__GNUC__)
532#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
534 template <
typename T>
537#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
538 trace::printf (
"directory_implementable::%s() @%p\n", __func__,
this);
541#pragma GCC diagnostic pop
543 template <
typename T>
552 template <
typename T,
typename L>
556 impl_instance_{ fs },
559#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
560 trace::printf (
"directory_lockable::%s()=@%p\n", __func__,
this);
564#pragma GCC diagnostic push
565#if defined(__clang__)
566#elif defined(__GNUC__)
567#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
569 template <
typename T,
typename L>
572#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
573 trace::printf (
"directory_lockable::%s() @%p\n", __func__,
this);
576#pragma GCC diagnostic pop
580 template <
typename T,
typename L>
584#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
585 trace::printf (
"directory_lockable::%s() @%p\n", __func__,
this);
588 std::lock_guard<L> lock{ locker_ };
593 template <
typename T,
typename L>
597#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
598 trace::printf (
"directory_lockable::%s() @%p\n", __func__,
this);
601 std::lock_guard<L> lock{ locker_ };
606 template <
typename T,
typename L>
610#if defined(OS_TRACE_POSIX_IO_DIRECTORY)
611 trace::printf (
"directory_lockable::%s() @%p\n", __func__,
this);
614 std::lock_guard<L> lock{ locker_ };
619 template <
typename T,
typename L>
630#pragma GCC diagnostic pop
class file_system & get_file_system(void) const
virtual int do_close(void)=0
virtual dirent * do_read(void)=0
virtual void do_rewind(void)=0
virtual ~directory_impl()
value_type & impl(void) const
directory_implementable(file_system &fs)
virtual ~directory_implementable() override
value_type & impl(void) const
virtual int close(void) override
directory_lockable(file_system &fs, lockable_type &locker)
virtual ~directory_lockable() override
virtual dirent * read(void) override
virtual void rewind(void) override
class file_system & get_file_system(void) const
virtual dirent * read(void)
virtual void rewind(void)
directory_impl & impl(void) const
The core of a double linked list, pointers to next, previous.
int printf(const char *format,...)
Write a formatted string to the trace device.