Alexandria  2.27.0
SDC-CH common library for the Euclid project
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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. More...
 
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

Definition at line 66 of file FileHandler.h.

Definition at line 65 of file FileHandler.h.

Definition at line 67 of file FileHandler.h.

Member Enumeration Documentation

Open modes.

Enumerator
kRead 
kWrite 
kTry 
kTryRead 
kTryWrite 

Definition at line 42 of file FileHandler.h.

Constructor & Destructor Documentation

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

Destructor.

Definition at line 27 of file FileHandler.cpp.

References m_available_fd.

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

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 Euclid::FilePool::FileHandler::FdWrapper::close(), m_available_fd, m_handler_mutex, and std::move().

Here is the call graph for this function:

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
template<typename TFD >
std::unique_ptr<FileAccessor<TFD> > Euclid::FilePool::FileHandler::getReadAccessor ( bool  try_lock)
private
template<typename TFD >
std::unique_ptr<FileAccessor<TFD> > Euclid::FilePool::FileHandler::getWriteAccessor ( bool  try_lock)
private
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 Function Documentation

friend class FileManager
friend

Definition at line 63 of file FileHandler.h.

Member Data Documentation

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().

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

Definition at line 91 of file FileHandler.h.

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

Definition at line 92 of file FileHandler.h.

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

Definition at line 89 of file FileHandler.h.

Referenced by close().

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

Definition at line 94 of file FileHandler.h.

Referenced by isReadOnly().

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: