root/software/photo_compress_archiver/PhotoCompressArchiver.hh @ 4f833a04
| b216a5b0 | David Sorber | #ifndef PHOTOCOMPRESSARCHIVER_H
|
||
#define PHOTOCOMPRESSARCHIVER_H
|
||||
#include <atomic>
|
||||
#include <condition_variable>
|
||||
#include <cstdint>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
// Alias the boost fs namespace to keep the code readable
|
||||
namespace bfs = boost::filesystem;
|
||||
const boost::regex JPEG_REGEX("^.+\\.(jpg)|(jpeg)$", boost::regex::icase);
|
||||
class PhotoCompressArchiver
|
||||
{
|
||||
public:
|
||||
PhotoCompressArchiver(const char* path, uint32_t num_cores);
|
||||
~PhotoCompressArchiver();
|
||||
/**
|
||||
* Start processing
|
||||
*/
|
||||
int execute();
|
||||
/**
|
||||
* Recursively find input files based on passed regex
|
||||
*/
|
||||
void find_files(
|
||||
const bfs::path& dir_path,
|
||||
const boost::regex& file_regex);
|
||||
/**
|
||||
* Fork and wait
|
||||
*/
|
||||
void fork_worker(uint32_t tid, std::vector<bfs::path>* file_sublist);
|
||||
| f8e600bc | David Sorber | |||
/**
|
||||
* Calculate the return the "global" percent done as determined by the
|
||||
* m_files_processed and m_num_input_files instance variables.
|
||||
*/
|
||||
double get_global_percent_done();
|
||||
| b216a5b0 | David Sorber | |||
private:
|
||||
| f8e600bc | David Sorber | const bfs::path m_path; // top level path where to look for input files
|
||
| b216a5b0 | David Sorber | uint32_t m_num_cores; // number of cores on the machine
|
||
std::mutex m_output_mutex; // output mutex
|
||||
| f8e600bc | David Sorber | std::atomic<uint32_t> m_files_processed; // number of input files processed
|
||
uint32_t m_num_input_files; // total number of input files found
|
||||
std::atomic<uint64_t> m_total_uncompressed_size;// total uncompressed size of all images
|
||||
std::atomic<uint64_t> m_total_compressed_size; // total compressed size of all images
|
||||
| b216a5b0 | David Sorber | |||
| f8e600bc | David Sorber | std::vector<bfs::path> m_file_list; // input file list (either images or compressed images)
|
||
| b216a5b0 | David Sorber | |||
| f8e600bc | David Sorber | std::thread* p_finder_thread; // file finder thread
|
||
std::vector<std::thread*> m_worker_threads; // worker threads
|
||||
| b216a5b0 | David Sorber | };
|
||
#endif // PHOTOCOMPRESSARCHIVER_H
|