Add fourcc type
This commit is contained in:
parent
03c9c1b642
commit
a4e6f67bc5
50
types.cpp
50
types.cpp
@ -118,3 +118,53 @@ template uint64_t hton<uint64_t> (uint64_t);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
fourcc
|
||||
fourcc::from_chars (uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
|
||||
fourcc lhs;
|
||||
|
||||
lhs.data[0] = a;
|
||||
lhs.data[1] = b;
|
||||
lhs.data[2] = c;
|
||||
lhs.data[3] = d;
|
||||
|
||||
return lhs;
|
||||
}
|
||||
|
||||
|
||||
fourcc
|
||||
fourcc::from_str (const char data[4]) {
|
||||
fourcc lhs;
|
||||
|
||||
lhs.data[0] = (uint8_t)data[0];
|
||||
lhs.data[1] = (uint8_t)data[1];
|
||||
lhs.data[2] = (uint8_t)data[2];
|
||||
lhs.data[3] = (uint8_t)data[3];
|
||||
|
||||
return lhs;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
fourcc::operator== (const char rhs[4]) const {
|
||||
return data[0] == rhs[0] &&
|
||||
data[1] == rhs[1] &&
|
||||
data[2] == rhs[2] &&
|
||||
data[3] == rhs[3];
|
||||
}
|
||||
|
||||
|
||||
fourcc::operator uint32_t (void) const {
|
||||
return (uint32_t)(data[0] << 24U |
|
||||
data[1] << 16U |
|
||||
data[2] << 8U |
|
||||
data[3]);
|
||||
}
|
||||
|
||||
|
||||
ostream&
|
||||
operator<< (ostream &os, fourcc f) {
|
||||
os << f.data[0] << f.data[1] << f.data[2] << f.data[3];
|
||||
return os;
|
||||
}
|
||||
|
||||
|
28
types.hpp
28
types.hpp
@ -143,20 +143,28 @@ size_t elems(T (&)[N])
|
||||
{ return N; }
|
||||
|
||||
|
||||
/// Convert a scalar from host byte order to network byte order
|
||||
template <typename T>
|
||||
T hton (T) pure;
|
||||
|
||||
|
||||
/// Convert a scalar from network byte order to host byte order
|
||||
template <typename T>
|
||||
T ntoh (T) pure;
|
||||
|
||||
|
||||
template <typename T, typename ...Args>
|
||||
std::unique_ptr<T>
|
||||
make_unique (const Args &...args)
|
||||
{ return std::unique_ptr<T> (new T (args...)); }
|
||||
|
||||
|
||||
struct fourcc {
|
||||
uint8_t data[4];
|
||||
|
||||
static fourcc from_str(const char[4]);
|
||||
static fourcc from_chars(uint8_t, uint8_t, uint8_t, uint8_t);
|
||||
|
||||
bool operator== (const char[4]) const;
|
||||
operator uint32_t (void) const;
|
||||
};
|
||||
|
||||
std::ostream& operator<< (std::ostream&, fourcc);
|
||||
|
||||
|
||||
inline double sign (double x) { return x >= 0 ? 1.0 : -1.0; }
|
||||
inline float sign (float x) { return x >= 0 ? 1.0 : -1.0; }
|
||||
inline int sign (int x) { return x >= 0 ? 1 : -1 ; }
|
||||
|
||||
|
||||
#endif // __TYPES_HPP
|
||||
|
Loading…
Reference in New Issue
Block a user