2013-06-05 19:19:00 +00:00
|
|
|
#pragma once
|
|
|
|
|
#include <fc/crypto/base64.hpp>
|
|
|
|
|
#include <fc/variant.hpp>
|
2012-09-26 03:20:25 +00:00
|
|
|
|
|
|
|
|
namespace fc {
|
|
|
|
|
|
|
|
|
|
template<typename T, size_t N>
|
|
|
|
|
class array {
|
|
|
|
|
public:
|
|
|
|
|
T data[N];
|
|
|
|
|
};
|
|
|
|
|
|
2013-06-05 19:19:00 +00:00
|
|
|
template<typename T, size_t N>
|
|
|
|
|
bool operator == ( const array<T,N>& a, const array<T,N>& b )
|
|
|
|
|
{ return 0 == memcmp( a.data, b.data, N ); }
|
|
|
|
|
template<typename T, size_t N>
|
|
|
|
|
bool operator != ( const array<T,N>& a, const array<T,N>& b )
|
|
|
|
|
{ return 0 != memcmp( a.data, b.data, N ); }
|
2012-09-26 03:20:25 +00:00
|
|
|
|
2013-06-05 19:19:00 +00:00
|
|
|
template<typename T, size_t N>
|
|
|
|
|
void to_variant( const array<T,N>& bi, variant& v )
|
|
|
|
|
{
|
2013-06-27 18:45:11 +00:00
|
|
|
v = std::vector<char>( (const char*)&bi, ((const char*)&bi) + sizeof(bi) );
|
2013-06-05 19:19:00 +00:00
|
|
|
}
|
|
|
|
|
template<typename T, size_t N>
|
|
|
|
|
void from_variant( const variant& v, array<T,N>& bi )
|
|
|
|
|
{
|
2013-06-27 18:45:11 +00:00
|
|
|
std::vector<char> ve = v.as< std::vector<char> >();
|
2013-06-05 19:19:00 +00:00
|
|
|
if( ve.size() )
|
|
|
|
|
{
|
|
|
|
|
memcpy(&bi, ve.data(), fc::min<size_t>(ve.size(),sizeof(bi)) );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
memset( &bi, char(0), sizeof(bi) );
|
|
|
|
|
}
|
|
|
|
|
}
|