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
|
#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; }
|
{ 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>
|
template <typename T, typename ...Args>
|
||||||
std::unique_ptr<T>
|
std::unique_ptr<T>
|
||||||
make_unique (const Args &...args)
|
make_unique (const Args &...args)
|
||||||
{ return std::unique_ptr<T> (new T (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
|
#endif // __TYPES_HPP
|
||||||
|
Loading…
Reference in New Issue
Block a user