121 lines
2.0 KiB
C++
121 lines
2.0 KiB
C++
/*
|
|
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license and patent
|
|
* grant that can be found in the LICENSE file in the root of the source
|
|
* tree. 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
|