Alexandria 2.31.0
SDC-CH common library for the Euclid project
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
Euclid::FilePool::FileHandler Class Reference

#include <FileHandler.h>

Collaboration diagram for Euclid::FilePool::FileHandler:
Collaboration graph
[legend]

Classes

struct  FdWrapper
 
struct  TypedFdWrapper
 

Public Types

enum  Mode {
  kRead = 0 , kWrite = 1 , kTry = 2 , kTryRead = kTry ,
  kTryWrite = kTry | kWrite
}
 Open modes. More...
 

Public Member Functions

virtual ~FileHandler ()
 Destructor.
 
template<typename TFD >
std::unique_ptr< FileAccessor< TFD > > getAccessor (Mode mode=kRead)
 
bool isReadOnly () const
 

Private Types

using SharedMutex = typename FileAccessorBase::SharedMutex
 
using SharedLock = typename FileAccessorBase::SharedLock
 
using UniqueLock = typename FileAccessorBase::UniqueLock
 

Private Member Functions

 FileHandler (const boost::filesystem::path &path, std::weak_ptr< FileManager > file_manager)
 
bool close (FileManager::FileId id)
 
template<typename TFD >
std::unique_ptr< FileAccessor< TFD > > getWriteAccessor (bool try_lock)
 
template<typename TFD >
std::unique_ptr< FileAccessor< TFD > > getReadAccessor (bool try_lock)
 

Private Attributes

std::mutex m_handler_mutex
 
boost::filesystem::path m_path
 
std::weak_ptr< FileManagerm_file_manager
 
SharedMutex m_file_mutex
 
std::map< FileManager::FileId, std::unique_ptr< FdWrapper > > m_available_fd
 
bool m_is_readonly
 

Friends

class FileManager
 

Detailed Description

Wraps a set of file descriptors. It should rely on a FileManager implementation to do the opening/closing and policy handling of lifetimes. This is, the FileManager implementation decides the policy on when to close a given file descriptor if the maximum is reached. However, it will play "nice" and just ask the handler to please close it. The handler must not close a file being accessed, so it should just refuse to do so and let the FileManager figure it out.

Definition at line 39 of file FileHandler.h.

Member Typedef Documentation

◆ SharedLock

Definition at line 66 of file FileHandler.h.

◆ SharedMutex

Definition at line 65 of file FileHandler.h.

◆ UniqueLock

Definition at line 67 of file FileHandler.h.

Member Enumeration Documentation

◆ Mode

Open modes.

Enumerator
kRead 
kWrite 
kTry 
kTryRead 
kTryWrite 

Definition at line 42 of file FileHandler.h.

Constructor & Destructor Documentation

◆ ~FileHandler()

Euclid::FilePool::FileHandler::~FileHandler ( )
virtual

Destructor.

Definition at line 27 of file FileHandler.cpp.

References m_available_fd.

◆ FileHandler()

Euclid::FilePool::FileHandler::FileHandler ( const boost::filesystem::path &  path,
std::weak_ptr< FileManager file_manager 
)
private

Constructor

Parameters
pathFile path
file_managerFileManager implementation responsible for opening/closing and keeping track of number of opened files. A FileHandler could survive the manager as long as no new accessors are needed.

Definition at line 24 of file FileHandler.cpp.

Member Function Documentation

◆ close()

bool Euclid::FilePool::FileHandler::close ( FileManager::FileId  id)
private

This is to be used by the FileManager to request the closing of a file descriptor

Parameters
idID of the file to close
Returns
false if it can not be closed (i.e. in use)

Definition at line 37 of file FileHandler.cpp.

References m_available_fd, m_handler_mutex, and std::move().

Here is the call graph for this function:

◆ getAccessor()

template<typename TFD >
std::unique_ptr< FileAccessor< TFD > > Euclid::FilePool::FileHandler::getAccessor ( Mode  mode = kRead)

Get a new FileAccessor

Parameters
modeThe accessor mode. TryRead and TryWrite can be used if the caller does not want to block.
Returns
A new file accessor
Exceptions
Ifopening the file fails

◆ getReadAccessor()

template<typename TFD >
std::unique_ptr< FileAccessor< TFD > > Euclid::FilePool::FileHandler::getReadAccessor ( bool  try_lock)
private

◆ getWriteAccessor()

template<typename TFD >
std::unique_ptr< FileAccessor< TFD > > Euclid::FilePool::FileHandler::getWriteAccessor ( bool  try_lock)
private

◆ isReadOnly()

bool Euclid::FilePool::FileHandler::isReadOnly ( ) const
Returns
true if the handler is open in read-only mode (default)

Definition at line 33 of file FileHandler.cpp.

References m_is_readonly.

Friends And Related Symbol Documentation

◆ FileManager

friend class FileManager
friend

Definition at line 63 of file FileHandler.h.

Member Data Documentation

◆ m_available_fd

std::map<FileManager::FileId, std::unique_ptr<FdWrapper> > Euclid::FilePool::FileHandler::m_available_fd
private

Definition at line 93 of file FileHandler.h.

Referenced by close(), and ~FileHandler().

◆ m_file_manager

std::weak_ptr<FileManager> Euclid::FilePool::FileHandler::m_file_manager
private

Definition at line 91 of file FileHandler.h.

◆ m_file_mutex

SharedMutex Euclid::FilePool::FileHandler::m_file_mutex
private

Definition at line 92 of file FileHandler.h.

◆ m_handler_mutex

std::mutex Euclid::FilePool::FileHandler::m_handler_mutex
private

Definition at line 89 of file FileHandler.h.

Referenced by close().

◆ m_is_readonly

bool Euclid::FilePool::FileHandler::m_is_readonly
private

Definition at line 94 of file FileHandler.h.

Referenced by isReadOnly().

◆ m_path

boost::filesystem::path Euclid::FilePool::FileHandler::m_path
private

Definition at line 90 of file FileHandler.h.


The documentation for this class was generated from the following files: