diff options
Diffstat (limited to 'src/sim')
-rw-r--r-- | src/sim/fd_array.cc | 30 | ||||
-rw-r--r-- | src/sim/fd_array.hh | 51 |
2 files changed, 42 insertions, 39 deletions
diff --git a/src/sim/fd_array.cc b/src/sim/fd_array.cc index 174236e3e..0600e9ffe 100644 --- a/src/sim/fd_array.cc +++ b/src/sim/fd_array.cc @@ -48,15 +48,15 @@ FDArray::FDArray(std::string const& input, std::string const& output, std::string const& errout) - : _input(input), _output(output), _errout(errout), _fdArray(), - imap {{"", -1}, - {"cin", STDIN_FILENO}, - {"stdin", STDIN_FILENO}}, - oemap{{"", -1}, - {"cout", STDOUT_FILENO}, - {"stdout", STDOUT_FILENO}, - {"cerr", STDERR_FILENO}, - {"stderr", STDERR_FILENO}} + : _fdArray(), _input(input), _output(output), _errout(errout), + _imap {{"", -1}, + {"cin", STDIN_FILENO}, + {"stdin", STDIN_FILENO}}, + _oemap{{"", -1}, + {"cout", STDOUT_FILENO}, + {"stdout", STDOUT_FILENO}, + {"cerr", STDERR_FILENO}, + {"stderr", STDERR_FILENO}} { int sim_fd; std::map<std::string, int>::iterator it; @@ -65,7 +65,7 @@ FDArray::FDArray(std::string const& input, std::string const& output, * Search through the input options and setup the default fd if match is * found; otherwise, open an input file and seek to location. */ - if ((it = imap.find(input)) != imap.end()) + if ((it = _imap.find(input)) != _imap.end()) sim_fd = it->second; else sim_fd = openInputFile(input); @@ -77,7 +77,7 @@ FDArray::FDArray(std::string const& input, std::string const& output, * Search through the output/error options and setup the default fd if * match is found; otherwise, open an output file and seek to location. */ - if ((it = oemap.find(output)) != oemap.end()) + if ((it = _oemap.find(output)) != _oemap.end()) sim_fd = it->second; else sim_fd = openOutputFile(output); @@ -88,7 +88,7 @@ FDArray::FDArray(std::string const& input, std::string const& output, if (output == errout) ; /* Reuse the same file descriptor if these match. */ - else if ((it = oemap.find(errout)) != oemap.end()) + else if ((it = _oemap.find(errout)) != _oemap.end()) sim_fd = it->second; else sim_fd = openOutputFile(errout); @@ -156,7 +156,7 @@ FDArray::restoreFileOffsets() stdin_ffd->setFileOffset(0); } - if ((it = imap.find(stdin_ffd->getFileName())) != imap.end()) { + if ((it = _imap.find(stdin_ffd->getFileName())) != _imap.end()) { stdin_ffd->setSimFD(it->second); } else { stdin_ffd->setSimFD(openInputFile(stdin_ffd->getFileName())); @@ -180,7 +180,7 @@ FDArray::restoreFileOffsets() stdout_ffd->setFileOffset(0); } - if ((it = oemap.find(stdout_ffd->getFileName())) != oemap.end()) { + if ((it = _oemap.find(stdout_ffd->getFileName())) != _oemap.end()) { stdout_ffd->setSimFD(it->second); } else { stdout_ffd->setSimFD(openOutputFile(stdout_ffd->getFileName())); @@ -207,7 +207,7 @@ FDArray::restoreFileOffsets() if (stdout_ffd->getFileName() == stderr_ffd->getFileName()) { /* Reuse the same sim_fd file descriptor if these match. */ stderr_ffd->setSimFD(stdout_ffd->getSimFD()); - } else if ((it = oemap.find(stderr_ffd->getFileName())) != oemap.end()) { + } else if ((it = _oemap.find(stderr_ffd->getFileName())) != _oemap.end()) { stderr_ffd->setSimFD(it->second); } else { stderr_ffd->setSimFD(openOutputFile(stderr_ffd->getFileName())); diff --git a/src/sim/fd_array.hh b/src/sim/fd_array.hh index 70a7f47da..ac6c07f95 100644 --- a/src/sim/fd_array.hh +++ b/src/sim/fd_array.hh @@ -44,9 +44,6 @@ class FDArray { - private: - static const int NUM_FDS = 1024; - public: /** * Initialize the file descriptor array and set the standard file @@ -59,10 +56,6 @@ class FDArray FDArray(std::string const& input, std::string const& output, std::string const& errout); - std::string _input; - std::string _output; - std::string _errout; - /** * Figure out the file offsets for all currently open files and save them * the offsets during the calls to drain by the owning process. @@ -76,17 +69,30 @@ class FDArray void restoreFileOffsets(); /** + * Put the pointer specified by fdep into the _fdArray entry indexed + * by tgt_fd. + * @param tgt_fd Use target file descriptors to index the array. + * @param fdep Incoming pointer used to set the entry pointed to by tgt_fd. + */ + void setFDEntry(int tgt_fd, std::shared_ptr<FDEntry> fdep); + + /** * Treat this object like a normal array in using the subscript operator * to pull entries out of it. * @param tgt_fd Use target file descriptors to index the array. */ - inline std::shared_ptr<FDEntry> + std::shared_ptr<FDEntry> operator[](int tgt_fd) { return getFDEntry(tgt_fd); } /** + * Return the size of the _fdArray field + */ + int getSize() const { return _fdArray.size(); } + + /** * Step through the file descriptor array and find the first available * entry which is denoted as being free by being a 'nullptr'. That file * descriptor entry is the new target file descriptor entry that we @@ -99,19 +105,6 @@ class FDArray int allocFD(std::shared_ptr<FDEntry> fdp); /** - * Return the size of the _fdArray field - */ - int getSize() const { return _fdArray.size(); } - - /** - * Put the pointer specified by fdep into the _fdArray entry indexed - * by tgt_fd. - * @param tgt_fd Use target file descriptors to index the array. - * @param fdep Incoming pointer used to set the entry pointed to by tgt_fd. - */ - void setFDEntry(int tgt_fd, std::shared_ptr<FDEntry> fdep); - - /** * Try to close the host file descriptor. If successful, set the * specified file descriptor entry object pointer to nullptr. * Used to "close" the target file descriptor. @@ -141,7 +134,17 @@ class FDArray * Hold pointers to the file descriptor entries. The array size is * statically defined by the operating system. */ - std::array<std::shared_ptr<FDEntry>, NUM_FDS> _fdArray; + static constexpr size_t _numFDs {1024}; + std::array<std::shared_ptr<FDEntry>, _numFDs> _fdArray; + + /** + * Hold param strings passed from the Process class which indicate + * the filename for each of the corresponding files or some keyword + * indicating the use of standard file descriptors. + */ + std::string _input; + std::string _output; + std::string _errout; /** * Hold strings which represent the default values which are checked @@ -149,8 +152,8 @@ class FDArray * provided doesn't hit against these maps, then a file is opened on the * host instead of using the host's standard file descriptors. */ - std::map<std::string, int> imap; - std::map<std::string, int> oemap; + std::map<std::string, int> _imap; + std::map<std::string, int> _oemap; }; #endif // __FD_ARRAY_HH__ |