5#ifndef FLUTTER_FML_UNIQUE_FD_H_
6#define FLUTTER_FML_UNIQUE_FD_H_
8#include "flutter/fml/build_config.h"
9#include "flutter/fml/unique_object.h"
29 std::wstring filename;
36struct UniqueFDTraits {
37 static std::mutex file_map_mutex;
38 static std::map<HANDLE, DirCacheEntry> file_map;
41 static bool IsValid(
HANDLE value) {
return value != InvalidValue(); }
42 static void Free_Handle(
HANDLE fd);
44 static void Free(
HANDLE fd) {
47 UniqueFDTraits::Free_Handle(fd);
50 static void RemoveCacheEntry(
HANDLE fd) {
51 const std::lock_guard<std::mutex> lock(file_map_mutex);
56 static void StoreCacheEntry(
HANDLE fd, DirCacheEntry
state) {
57 const std::lock_guard<std::mutex> lock(file_map_mutex);
61 static std::optional<DirCacheEntry> GetCacheEntry(
HANDLE fd) {
62 const std::lock_guard<std::mutex> lock(file_map_mutex);
63 auto found = file_map.find(fd);
64 return found == file_map.end()
66 : std::optional<DirCacheEntry>{found->second};
79 static void Free(
int fd);
85 static void Free(DIR* dir);
96using UniqueFD = UniqueObject<HANDLE, internal::os_win::UniqueFDTraits>;
UniqueObject< int, internal::os_unix::UniqueFDTraits > UniqueFD
static DIR * InvalidValue()
static void Free(DIR *dir)
static bool IsValid(DIR *value)
static int InvalidValue()
static bool IsValid(int value)
#define INVALID_HANDLE_VALUE