32 #include <string_view> 40 std::unique_ptr<EncodeMapperClass> ReadEncodeMapper(
41 std::istream &istrm,
const std::string &source) {
43 LOG(ERROR) <<
"ReadEncodeMapperClass: Can't open file: " << source;
46 EncodeTableHeader hdr;
47 if (!hdr.Read(istrm, source))
return nullptr;
48 const auto &arc_type = hdr.ArcType();
50 if (arc_type.empty()) {
51 LOG(ERROR) <<
"Old-style EncodeMapper cannot be used with script interface";
55 istrm.seekg(0, istrm.beg);
56 static const auto *reg =
58 const auto reader = reg->GetReader(arc_type);
60 LOG(ERROR) <<
"EncodeMapperClass::Read: Unknown arc type: " << arc_type;
63 return reader(istrm, source);
66 std::unique_ptr<EncodeMapperImplBase> CreateEncodeMapper(
67 std::string_view arc_type, uint8_t flags,
EncodeType type) {
68 static const auto *reg =
70 auto creator = reg->GetCreator(arc_type);
72 FSTERROR() <<
"EncodeMapperClass: Unknown arc type: " << arc_type;
75 return creator(flags, type);
82 : impl_(CreateEncodeMapper(arc_type, flags, type)) {}
85 const std::string &source) {
86 if (!source.empty()) {
87 std::ifstream strm(source, std::ios_base::in | std::ios_base::binary);
88 return ReadEncodeMapper(strm, source);
90 return ReadEncodeMapper(std::cin,
"standard input");
95 std::istream &strm,
const std::string &source) {
96 return ReadEncodeMapper(strm, source);
REGISTER_ENCODEMAPPER_CLASS(StdArc)
static std::unique_ptr< EncodeMapperClass > Read(const std::string &source)
static EncodeMapperClassIORegister< Reader, Creator > * GetRegister()