/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef FOURCC_HPP #define FOURCC_HPP #include <iosfwd> #include <cstring> #if defined(__POWERPC__) || defined(__APPLE__) || defined(__MERKS__) using namespace std; #endif class four_cc { public: four_cc(); four_cc(const char*); explicit four_cc(unsigned long); bool operator==(const four_cc&) const; bool operator!=(const four_cc&) const; bool operator==(const char*) const; bool operator!=(const char*) const; operator unsigned long() const; unsigned long as_long() const; four_cc& operator=(unsigned long); char operator[](int) const; std::ostream& put(std::ostream&) const; bool printable() const; private: union { char code[4]; unsigned long code_as_long; }; }; inline four_cc::four_cc() { } inline four_cc::four_cc(unsigned long x) : code_as_long(x) { } inline four_cc::four_cc(const char* str) { memcpy(code, str, 4); } inline bool four_cc::operator==(const four_cc& rhs) const { return code_as_long == rhs.code_as_long; } inline bool four_cc::operator!=(const four_cc& rhs) const { return !operator==(rhs); } inline bool four_cc::operator==(const char* rhs) const { return (memcmp(code, rhs, 4) == 0); } inline bool four_cc::operator!=(const char* rhs) const { return !operator==(rhs); } inline four_cc::operator unsigned long() const { return code_as_long; } inline unsigned long four_cc::as_long() const { return code_as_long; } inline char four_cc::operator[](int i) const { return code[i]; } inline four_cc& four_cc::operator=(unsigned long val) { code_as_long = val; return *this; } inline std::ostream& operator<<(std::ostream& os, const four_cc& rhs) { return rhs.put(os); } #endif