// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #ifndef RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_ #define RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_ #include #include #include #include #include "bin/builtin.h" #include "bin/dartutils.h" #include "bin/namespace.h" namespace dart { namespace bin { class FileSystemWatcher { public: enum EventType { kCreate = 1 << 0, kModifyContent = 1 << 1, kDelete = 1 << 2, kMove = 1 << 3, kModifyAttribute = 1 << 4, kDeleteSelf = 1 << 5, kIsDir = 1 << 6, kMovedTo = 1 << 7, }; // ReadEvents returns array of arrays encoding individual events. // Each event has the following elements. // // Keep in sync with _EventConverter in file_patch.dart. enum { kEventFlagsIndex = 0, // See EventType kEventCookieIndex = 1, // Integer used to link move from and move to events kEventPathIndex = 2, // String path kEventPathIdIndex = 3, // Integer pathId kEventNumElements = 4, }; static void InitOnce(); static void Cleanup(); static bool IsSupported(); static intptr_t Init(); static void Close(intptr_t id); static intptr_t WatchPath(intptr_t id, Namespace* namespc, const char* path, int events, bool recursive); static void UnwatchPath(intptr_t id, intptr_t path_id); static intptr_t GetSocketId(intptr_t id, intptr_t path_id); static Dart_Handle ReadEvents(intptr_t id, intptr_t path_id); #if defined(DART_HOST_OS_MACOS) || defined(DART_HOST_OS_WINDOWS) static void DestroyWatch(void* ptr); #endif static void set_delayed_filewatch_callback(bool value) { delayed_filewatch_callback_ = value; } static bool delayed_filewatch_callback() { return delayed_filewatch_callback_; } private: static bool delayed_filewatch_callback_; DISALLOW_COPY_AND_ASSIGN(FileSystemWatcher); }; } // namespace bin } // namespace dart #endif // RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_