Program Listing for File FdManager.cc

Program Listing for File FdManager.cc#

Return to documentation for file (src/io/FdManager.cc)

/* internal */
#include "FdManager.h"

namespace Coral
{

FdManager::~FdManager()
{
    for (const auto &[name, fds] : groups)
    {
        std::cout << "Closing file-descriptor group '" << name << "'."
                  << std::endl;
        close_fds(fds);
    }
}

Result FdManager::add_file_fd(const std::string path, const std::string mode,
                              const std::string group)
{
    return get_file_fd(path, fd_group(group), mode);
}

FdMap &FdManager::fd_group(const std::string group)
{
    if (groups.try_emplace(group, FdMap()).second)
    {
        std::cout << "Created file-descriptor group '" << group << "'."
                  << std::endl;
    }
    return groups[group];
}

Result FdManager::add_fd(const std::string name, int fd,
                         const std::string group)
{
    FdMap &fds = fd_group(group);
    bool result = not fds.contains(name);
    if (result)
    {
        std::cout << "Adding [" << group << "][" << name << "] = " << fd << "."
                  << std::endl;
        fds[name] = fd;
    }
    return ToResult(result);
}

int &FdManager::operator[](const std::string name)
{
    return fd_group()[name];
}

} // namespace Coral