더북(TheBook)

코드 4-4 바이트 스와핑 함수 템플릿화

template <typename T, size_t tSize> class ByteSwapper;
 
// 2바이트용 특수화
template <typename T>
class ByteSwapper<T, 2>
{
public:
    T Swap(T inData) const
    {
        uint16_t result =
            ByteSwap2(TypeAliaser<T, uint16_t>(inData).Get());
        return TypeAliaser<uint16_t, T>(result).Get();
    }
};
 
// 4바이트용 특수화
template <typename T>
class ByteSwapper<T, 4>
{
public:
    T Swap(T inData) const
    {
        uint32_t result =
            ByteSwap4(TypeAliaser<T, uint32_t>(inData).Get());
        return TypeAliaser<uint32_t, T>(result).Get();
    }
};
 
// 8바이트용 특수화
template <typename T>
class ByteSwapper<T, 8>
{
public:
    T Swap(T inData) const
    {
        uint64_t result =
            ByteSwap4(TypeAliaser<T, uint64_t>(inData).Get());
        return TypeAliaser<uint64_t, T>(result).Get();
    }
};
 
template <typename T>
T ByteSwap(T inData)
{
    return ByteSwapper<T, sizeof(T)>().Swap(inData);
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.