static std::pair<std::string, strus::NumericVariant> get( value const &v ) { std::pair<std::string, strus::NumericVariant> p; if( v.type( ) != is_object) { throw bad_value_cast( ); } p.first = v.get<std::string>( "key" ); value val = v["value"]; switch( val.type( ) ) { case is_boolean: // TODO: really? Do we allow this? p.second = ( v.get<bool>( "value" ) ) ? 1 : 0; break; case is_string: // TODO: really? Do we allow this? case is_number: if( is_of_type( val, p.second.variant.Int ) ) { p.second = v.get<BOOST_TYPEOF( p.second.variant.Int )>( "value" ); } else if( is_of_type( val, p.second.variant.UInt ) ) { p.second = v.get<BOOST_TYPEOF( p.second.variant.UInt )>( "value" ); } else if( is_of_type( val, p.second.variant.Float ) ) { p.second = v.get<BOOST_TYPEOF( p.second.variant.Float )>( "value" ); } else { throw bad_value_cast( ); } break; case is_undefined: case is_null: // TODO: how do we map absence case is_object: case is_array: default: throw bad_value_cast( ); } return p; }
ACI_TAG_NODE AgilorUtils::parse(const TAGNODE& info) { ACI_TAG_NODE node; aci::init(node); node.alarmhihi = info.alarmHiHi; node.alarmlolo = info.alarmLolo; node.alarmstate = info.alarmState; node.alarmtype = info.alarmType; node.compmax = info.compressMax; node.compmin = info.compressMin; node.creationdate = info.creationDate; memcpy(node.descriptor, info.desc.data(), boost::extent<BOOST_TYPEOF(node.descriptor)>::value); memcpy(node.engunits, info.engUnit.data(), boost::extent<BOOST_TYPEOF(node.engunits)>::value); memcpy(node.enumdesc, info.enumDesc.data(), boost::extent<BOOST_TYPEOF(node.enumdesc)>::value); node.excdev = info.exceptionDev; node.excmax = info.exceptionMax; node.excmin = info.exceptionMin; node.hihipriority = info.hihiPriority; node.hipriority = info.hiPriority; node.hisidx = info.hisIndex; node.istat = info.state; node.pointtype = info.type; node.scan = info.IOState; switch (info.type) { case 'R':node.rval = boost::lexical_cast<float>(info.value); break; case 'S':memcpy(node.sval, info.value.data(), sizeof(node.sval)); break; case 'B':node.bval = boost::lexical_cast<bool>(info.value); break; case 'L':node.lval = boost::lexical_cast<long>(info.value); break; default: break; } memcpy(node.name, info.name.data(), boost::extent<BOOST_TYPEOF(node.name)>::value); memcpy(node.sourceserver, info.deviceName.data(), boost::extent<BOOST_TYPEOF(node.sourceserver)>::value); memcpy(node.sourcegroup, info.groupName.data(), boost::extent<BOOST_TYPEOF(node.sourcegroup)>::value); memcpy(node.sourcetag, info.sourceTag.data(), boost::extent<BOOST_TYPEOF(node.sourcetag)>::value); return node; }
void test() { { boost::detail::winapi::LARGE_INTEGER_ a; LARGE_INTEGER b; BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::LARGE_INTEGER_)==sizeof(LARGE_INTEGER) ), NOTHING, (boost::detail::winapi::LARGE_INTEGER_, LARGE_INTEGER)); BOOST_TEST(( sizeof(a.QuadPart)==sizeof(b.QuadPart) )); BOOST_CHRONO_STATIC_ASSERT(( offsetof(boost::detail::winapi::LARGE_INTEGER_, QuadPart)==offsetof(LARGE_INTEGER, QuadPart) ), NOTHING, (boost::detail::winapi::LARGE_INTEGER_, LARGE_INTEGER)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same< BOOST_TYPEOF(a.QuadPart), BOOST_TYPEOF(b.QuadPart) >::value ), NOTHING, (boost::detail::winapi::LARGE_INTEGER_, LARGE_INTEGER)); } BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::BOOL_)==sizeof(BOOL) ), NOTHING, (boost::detail::winapi::BOOL_, BOOL)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same<boost::detail::winapi::BOOL_,BOOL>::value ), NOTHING, (boost::detail::winapi::BOOL_, BOOL)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::DWORD_)==sizeof(DWORD) ), NOTHING, (boost::detail::winapi::DWORD_, DWORD)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same<boost::detail::winapi::DWORD_,DWORD>::value ), NOTHING, (boost::detail::winapi::DWORD_, DWORD)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::HANDLE_)==sizeof(HANDLE) ), NOTHING, (boost::detail::winapi::HANDLE_, HANDLE)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same<boost::detail::winapi::HANDLE_,HANDLE>::value ), NOTHING, (boost::detail::winapi::HANDLE_, HANDLE)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::LONG_)==sizeof(LONG) ), NOTHING, (boost::detail::winapi::LONG_, LONG)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same<boost::detail::winapi::LONG_,LONG>::value ), NOTHING, (boost::detail::winapi::LONG_, LONG)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::LONGLONG_)==sizeof(LONGLONG) ), NOTHING, (boost::detail::winapi::LONGLONG_, LONGLONG)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same<boost::detail::winapi::LONGLONG_,LONGLONG>::value ), NOTHING, (boost::detail::winapi::LONGLONG_, LONGLONG)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::ULONG_PTR_)==sizeof(ULONG_PTR) ), NOTHING, (boost::detail::winapi::ULONG_PTR_, ULONG_PTR)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same<boost::detail::winapi::ULONG_PTR_,ULONG_PTR>::value ), NOTHING, (boost::detail::winapi::ULONG_PTR_, ULONG_PTR)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::PLARGE_INTEGER_)==sizeof(PLARGE_INTEGER) ), NOTHING, (boost::detail::winapi::PLARGE_INTEGER_, PLARGE_INTEGER)); //~ BOOST_CHRONO_STATIC_ASSERT(( //~ boost::is_same<boost::detail::winapi::PLARGE_INTEGER_,PLARGE_INTEGER>::value //~ ), NOTHING, (boost::detail::winapi::PLARGE_INTEGER_, PLARGE_INTEGER)); { BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::FILETIME_)==sizeof(FILETIME) ), NOTHING, (boost::detail::winapi::FILETIME_, FILETIME)); BOOST_CHRONO_STATIC_ASSERT(( sizeof(boost::detail::winapi::PFILETIME_)==sizeof(PFILETIME) ), NOTHING, (boost::detail::winapi::PFILETIME_, PFILETIME)); boost::detail::winapi::FILETIME_ a; FILETIME b; BOOST_TEST(( sizeof(a.dwLowDateTime)==sizeof(b.dwLowDateTime) )); BOOST_TEST(( sizeof(a.dwHighDateTime)==sizeof(b.dwHighDateTime) )); BOOST_CHRONO_STATIC_ASSERT(( offsetof(boost::detail::winapi::FILETIME_, dwLowDateTime)==offsetof(FILETIME, dwLowDateTime) ), NOTHING, (boost::detail::winapi::FILETIME_, FILETIME)); BOOST_CHRONO_STATIC_ASSERT(( offsetof(boost::detail::winapi::FILETIME_, dwHighDateTime)==offsetof(FILETIME, dwHighDateTime) ), NOTHING, (boost::detail::winapi::FILETIME_, FILETIME)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same< BOOST_TYPEOF(a.dwLowDateTime), BOOST_TYPEOF(b.dwLowDateTime) >::value ), NOTHING, (boost::detail::winapi::FILETIME_, FILETIME)); BOOST_CHRONO_STATIC_ASSERT(( boost::is_same< BOOST_TYPEOF(a.dwHighDateTime), BOOST_TYPEOF(b.dwHighDateTime) >::value ), NOTHING, (boost::detail::winapi::FILETIME_, FILETIME)); } // BOOST_CHRONO_STATIC_ASSERT(( // GetLastError==boost::detail::winapi::::GetLastError // ), NOTHING, ()); }