blob: 19c4f51adb12ed8a3fb3c126001f036cb069b35e [file] [log] [blame]
#ifndef PRJXRAY_LIB_SEGBITS_FILE_READER_H
#define PRJXRAY_LIB_SEGBITS_FILE_READER_H
#include <iterator>
#include <memory>
#include <absl/strings/string_view.h>
#include <prjxray/memory_mapped_file.h>
namespace prjxray {
class SegbitsFileReader {
public:
class value_type {
public:
absl::string_view tag() const { return tag_; }
absl::string_view bit() const { return bit_; }
private:
friend SegbitsFileReader;
value_type(const absl::string_view& view);
absl::string_view tag_;
absl::string_view bit_;
};
class iterator
: public std::iterator<std::input_iterator_tag, value_type> {
public:
iterator& operator++();
bool operator==(iterator other) const {
return view_ == other.view_;
}
bool operator!=(iterator other) const {
return !(*this == other);
}
const value_type& operator*() const { return value_; }
const value_type* operator->() const { return &value_; }
protected:
explicit iterator(absl::string_view view)
: view_(view), value_(view) {}
private:
friend SegbitsFileReader;
absl::string_view view_;
value_type value_;
};
static std::unique_ptr<SegbitsFileReader> InitWithFile(
const std::string& path);
iterator begin();
iterator end();
private:
SegbitsFileReader(std::unique_ptr<MemoryMappedFile>&& mapped_file)
: mapped_file_(std::move(mapped_file)){};
std::unique_ptr<MemoryMappedFile> mapped_file_;
};
} // namespace prjxray
#endif // PRJXRAY_LIB_SEGBITS_FILE_READER_H