Program Listing for File factorizer_templates.hpp

Return to documentation for file (src/cpp/factorizer_templates.hpp)

#ifndef FACTORIZER_TEMPLATES_HPP
#define FACTORIZER_TEMPLATES_HPP

#include "factorizer.hpp"
#include "factorizer_helpers.hpp"

namespace noLZSS {

template<class Sink>
size_t factorize_stream(std::string_view text, Sink&& sink, size_t start_pos) {
    std::string tmp(text);
    cst_t cst; construct_im(cst, tmp, 1);
    return nolzss(cst, std::forward<Sink>(sink), start_pos);
}

template<class Sink>
size_t factorize_stream_multiple_dna_w_rc(
    std::string_view text,
    Sink&& sink,
    size_t start_pos
) {
    std::string tmp(text);
    return nolzss_multiple_dna_w_rc(tmp, std::forward<Sink>(sink), start_pos);
}

template<class Sink>
size_t factorize_file_stream_multiple_dna_w_rc(
    const std::string& filepath,
    Sink&& sink,
    size_t start_pos
) {
    // Read file into string first
    std::ifstream file(filepath, std::ios::binary);
    if (!file) {
        throw std::runtime_error("Cannot open file: " + filepath);
    }
    std::string text((std::istreambuf_iterator<char>(file)),
                      std::istreambuf_iterator<char>());
    return nolzss_multiple_dna_w_rc(text, std::forward<Sink>(sink), start_pos);
}

} // namespace noLZSS

#endif // FACTORIZER_TEMPLATES_HPP