mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2025-01-09 03:31:41 +00:00
fourcc_c: new functions shift_read(); equiv() for std::vector<std::string>; human_readable()
This commit is contained in:
parent
b65bafe694
commit
de66a66e8b
@ -157,6 +157,24 @@ fourcc_c::equiv(char const *cmp)
|
|||||||
return balg::to_lower_copy(str()) == balg::to_lower_copy(std::string{cmp});
|
return balg::to_lower_copy(str()) == balg::to_lower_copy(std::string{cmp});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
fourcc_c::equiv(std::vector<std::string> const &cmp)
|
||||||
|
const {
|
||||||
|
auto lower = balg::to_lower_copy(str());
|
||||||
|
for (auto &s : cmp)
|
||||||
|
if (lower == balg::to_lower_copy(s))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
fourcc_c::human_readable(size_t min_num)
|
||||||
|
const {
|
||||||
|
static auto char_ok = [](char c) { return (('a' <= c) && ('z' >= c)) || (('A' <= c) && ('Z' >= c)) || (('0' <= c) && ('9' >= c)) || (0xa9 == c); };
|
||||||
|
auto lower = balg::to_lower_copy(str());
|
||||||
|
return min_num <= boost::accumulate(lower, 0u, [](unsigned num, char c) { return num + (char_ok(c) ? 1 : 0); });
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
fourcc_c::read(void const *mem,
|
fourcc_c::read(void const *mem,
|
||||||
fourcc_c::byte_order_t byte_order) {
|
fourcc_c::byte_order_t byte_order) {
|
||||||
@ -168,3 +186,22 @@ fourcc_c::read(mm_io_c &io,
|
|||||||
fourcc_c::byte_order_t byte_order) {
|
fourcc_c::byte_order_t byte_order) {
|
||||||
return val(io.read_uint32_be(), byte_order);
|
return val(io.read_uint32_be(), byte_order);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fourcc_c &
|
||||||
|
fourcc_c::shift_read(mm_io_cptr const &io,
|
||||||
|
byte_order_t byte_order) {
|
||||||
|
return shift_read(*io, byte_order);
|
||||||
|
}
|
||||||
|
|
||||||
|
fourcc_c &
|
||||||
|
fourcc_c::shift_read(mm_io_c &io,
|
||||||
|
byte_order_t byte_order) {
|
||||||
|
m_value = big_endian == byte_order ? (m_value << 8) | io.read_uint8() : (m_value >> 8) | (io.read_uint8() << 24);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
fourcc_c &
|
||||||
|
fourcc_c::shift_read(mm_io_c *io,
|
||||||
|
byte_order_t byte_order) {
|
||||||
|
return shift_read(*io, byte_order);
|
||||||
|
}
|
||||||
|
@ -47,6 +47,10 @@ public:
|
|||||||
fourcc_c(mm_io_c &io, byte_order_t byte_order = big_endian);
|
fourcc_c(mm_io_c &io, byte_order_t byte_order = big_endian);
|
||||||
fourcc_c(mm_io_c *io, byte_order_t byte_order = big_endian);
|
fourcc_c(mm_io_c *io, byte_order_t byte_order = big_endian);
|
||||||
|
|
||||||
|
fourcc_c &shift_read(mm_io_cptr const &io, byte_order_t byte_order = big_endian);
|
||||||
|
fourcc_c &shift_read(mm_io_c &io, byte_order_t byte_order = big_endian);
|
||||||
|
fourcc_c &shift_read(mm_io_c *io, byte_order_t byte_order = big_endian);
|
||||||
|
|
||||||
size_t write(memory_cptr const &mem, byte_order_t byte_order = big_endian);
|
size_t write(memory_cptr const &mem, byte_order_t byte_order = big_endian);
|
||||||
size_t write(unsigned char *mem, byte_order_t byte_order = big_endian);
|
size_t write(unsigned char *mem, byte_order_t byte_order = big_endian);
|
||||||
size_t write(mm_io_cptr const &io, byte_order_t byte_order = big_endian);
|
size_t write(mm_io_cptr const &io, byte_order_t byte_order = big_endian);
|
||||||
@ -59,6 +63,8 @@ public:
|
|||||||
std::string str() const;
|
std::string str() const;
|
||||||
|
|
||||||
bool equiv(char const *cmp) const;
|
bool equiv(char const *cmp) const;
|
||||||
|
bool equiv(std::vector<std::string> const &cmp) const;
|
||||||
|
bool human_readable(size_t min_num = 3) const;
|
||||||
|
|
||||||
explicit operator bool() const;
|
explicit operator bool() const;
|
||||||
bool operator ==(fourcc_c const &cmp) const;
|
bool operator ==(fourcc_c const &cmp) const;
|
||||||
|
@ -300,6 +300,34 @@ TEST(FourCC, Equivalence) {
|
|||||||
|
|
||||||
EXPECT_FALSE(fourcc_c{"ABCD"}.equiv("qwer"));
|
EXPECT_FALSE(fourcc_c{"ABCD"}.equiv("qwer"));
|
||||||
EXPECT_FALSE(fourcc_c{"abcd"}.equiv("qwer"));
|
EXPECT_FALSE(fourcc_c{"abcd"}.equiv("qwer"));
|
||||||
|
|
||||||
|
std::vector<std::string> vec{ "abcd", "WeRt", "uiOP", "VBNM" };
|
||||||
|
EXPECT_TRUE(fourcc_c{"ABCD"}.equiv(vec));
|
||||||
|
EXPECT_TRUE(fourcc_c{"WeRt"}.equiv(vec));
|
||||||
|
EXPECT_TRUE(fourcc_c{"vbnm"}.equiv(vec));
|
||||||
|
|
||||||
|
EXPECT_FALSE(fourcc_c{"dcba"}.equiv(vec));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(FourCC, HumanReadable) {
|
||||||
|
EXPECT_TRUE(fourcc_c{"ABCD"}.human_readable());
|
||||||
|
EXPECT_TRUE(fourcc_c{"ABC?"}.human_readable());
|
||||||
|
EXPECT_TRUE(fourcc_c{"AB??"}.human_readable(2));
|
||||||
|
|
||||||
|
EXPECT_TRUE(fourcc_c{"abcd"}.human_readable());
|
||||||
|
EXPECT_TRUE(fourcc_c{"abc?"}.human_readable());
|
||||||
|
EXPECT_TRUE(fourcc_c{"ab??"}.human_readable(2));
|
||||||
|
|
||||||
|
EXPECT_TRUE(fourcc_c{"a007"}.human_readable());
|
||||||
|
EXPECT_TRUE(fourcc_c{"?007"}.human_readable());
|
||||||
|
|
||||||
|
EXPECT_FALSE(fourcc_c{"abc?"}.human_readable(4));
|
||||||
|
EXPECT_FALSE(fourcc_c{"ab??"}.human_readable());
|
||||||
|
|
||||||
|
EXPECT_FALSE(fourcc_c{"abc?"}.human_readable(4));
|
||||||
|
EXPECT_FALSE(fourcc_c{"ab??"}.human_readable());
|
||||||
|
|
||||||
|
EXPECT_FALSE(fourcc_c{"??07"}.human_readable());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user