template < typename K, typename V > static void visit( const K& key, const status& t, V& v ) { v.apply( "t", t.timestamp ); v.apply( "position", t.get_position() ); // todo: quick and dirty, output as bitmask (or implement bitmask as csv type) v.apply( "con", t.status_response.status.con() ); v.apply( "exec", t.status_response.status.exec() ); v.apply( "des", t.status_response.status.des() ); v.apply( "oslr", t.status_response.status.oslr() ); v.apply( "cwm", t.status_response.status.cwm() ); v.apply( "ccwm", t.status_response.status.ccwm() ); v.apply( "upm", t.status_response.status.upm() ); v.apply( "dwnm", t.status_response.status.dwnm() ); v.apply( "cwsl", t.status_response.response_pan_status.cwsl() ); v.apply( "ccwsl", t.status_response.response_pan_status.ccwsl() ); v.apply( "cwhl", t.status_response.response_pan_status.cwhl() ); v.apply( "ccwhl", t.status_response.response_pan_status.ccwhl() ); v.apply( "pan-to", t.status_response.response_pan_status.to() ); v.apply( "pan-de", t.status_response.response_pan_status.de() ); v.apply( "usl", t.status_response.response_tilt_status.usl() ); v.apply( "dsl", t.status_response.response_tilt_status.dsl() ); v.apply( "uhl", t.status_response.response_tilt_status.uhl() ); v.apply( "dhl", t.status_response.response_tilt_status.dhl() ); v.apply( "tilt-to", t.status_response.response_tilt_status.to() ); v.apply( "tilt-de", t.status_response.response_tilt_status.de() ); }