Project

General

Profile

Download (2.15 KB) Statistics
| Branch: | Tag: | Revision:
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