5#include "../Foundation/Function.h"
6#include "../Foundation/OpaqueObject.h"
7#include "../Foundation/Result.h"
8#include "../Foundation/StringPath.h"
51 struct InternalDefinition
53 static constexpr int Windows = 3 *
sizeof(
void*);
54 static constexpr int Apple = 42 *
sizeof(
void*);
55 static constexpr int Linux =
sizeof(
void*) * 4;
56 static constexpr int Default = Linux;
58 static constexpr size_t Alignment =
alignof(
void*);
60 using Object = Internal;
72 struct ThreadRunnerInternal;
73 struct ThreadRunnerDefinition
75 static constexpr int MaxWatchablePaths = 1024;
77 static constexpr int Windows = (2 * MaxWatchablePaths + 2) *
sizeof(
void*) +
sizeof(
uint64_t);
78 static constexpr int Apple =
sizeof(
void*);
79 static constexpr int Linux =
sizeof(
void*) * 6;
80 static constexpr int Default = Linux;
82 static constexpr size_t Alignment =
alignof(
void*);
84 using Object = ThreadRunnerInternal;
87 struct FolderWatcherInternal;
88 struct FolderWatcherSizes
90 static constexpr int MaxNumberOfSubdirs = 128;
91 static constexpr int MaxChangesBufferSize = 1024;
93 static constexpr int Windows = MaxChangesBufferSize +
sizeof(
void*) +
sizeof(
void*);
94 static constexpr int Apple =
sizeof(
void*);
95 static constexpr int Linux = 1056 + 1024 + 8;
96 static constexpr int Default = Linux;
98 static constexpr size_t Alignment =
alignof(
void*);
100 using Object = FolderWatcherInternal;
125 friend struct Internal;
154#if SC_PLATFORM_WINDOWS
155#if SC_ASYNC_ENABLE_LOG
181 virtual Result appleStartWakeUp() = 0;
182 virtual void appleSignalEventObject() = 0;
183 virtual Result appleWakeUpAndWait() = 0;
185#elif SC_PLATFORM_LINUX
186 virtual Result linuxStartSharedFilePoll() = 0;
187 virtual Result linuxStopSharedFilePoll() = 0;
194 virtual void* windowsGetOverlapped(
FolderWatcher& watcher) = 0;
196 friend struct Internal;
229 friend decltype(internal);
230 friend decltype(FolderWatcher::internal);
233 struct WatcherLinkedList
241 WatcherLinkedList watchers;
unsigned long long uint64_t
Platform independent (8) bytes unsigned int.
Definition PrimitiveTypes.h:42
A buffer of bytes with given alignment.
Definition AlignedStorage.h:29
FileSystemWatcherAsync is an implementation of SC::FileSystemWatcher that uses SC::Async.
Definition FileSystemWatcherAsync.h:30
Abstract class to use event loop notifications (see SC::FileSystemWatcherAsync).
Definition FileSystemWatcher.h:176
Represents a single folder being watched.
Definition FileSystemWatcher.h:135
Function< void(const Notification &)> notifyCallback
Function that will be called on a notification.
Definition FileSystemWatcher.h:142
FolderWatcher(Span< char > subFolderRelativePathsBuffer={})
Constructs a folder watcher.
void setDebugName(const char *debugName)
Sets debug name for AsyncFilePoll used on Windows (used only for debug purposes)
Result stopWatching()
Stop watching this directory.
Notification holding type and path.
Definition FileSystemWatcher.h:114
StringSpan relativePath
Relative path of the file being notified from basePath
Definition FileSystemWatcher.h:116
Operation operation
Notification type.
Definition FileSystemWatcher.h:117
StringSpan basePath
Reference to the watched directory.
Definition FileSystemWatcher.h:115
SC::Result getFullPath(StringPath &path) const
Get the full path of the file being watched.
Notifies about events (add, remove, rename, modified) on files and directories.
Definition FileSystemWatcher.h:47
Result close()
Stops all watchers and frees the ThreadRunner or EventLoopRunner passed in init.
Result init(EventLoopRunner &runner)
Setup watcher to receive async notifications on an event loop.
Result init(ThreadRunner &runner)
Setup watcher to receive notifications from a background thread.
Operation
Specifies the event classes.
Definition FileSystemWatcher.h:107
@ Modified
A file or directory has been modified in its contents and/or timestamp.
@ AddRemoveRename
A file or directory has been added, removed or renamed.
Result watch(FolderWatcher &watcher, StringSpan path)
Starts watching a single directory, calling FolderWatcher::notifyCallback on file events.
Wraps function pointers, member functions and lambdas without ever allocating.
Definition Function.h:19
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:12
View over a contiguous sequence of items (pointer + size in elements).
Definition Span.h:29
Pre-sized char array holding enough space to represent a file system path.
Definition StringPath.h:42
An read-only view over a string (to avoid including Strings library when parsing is not needed).
Definition StringSpan.h:37