SCM gnc_kvp_value_ptr_to_scm(KvpValue* val) { if (val == nullptr) return SCM_BOOL_F; switch (val->get_type()) { case KvpValue::Type::INT64: return scm_from_int64(val->get<int64_t>()); break; case KvpValue::Type::DOUBLE: return scm_from_double (val->get<double>()); break; case KvpValue::Type::NUMERIC: return gnc_numeric_to_scm(val->get<gnc_numeric>()); break; case KvpValue::Type::STRING: { auto string = val->get<const char*>(); return string ? scm_from_utf8_string(string) : SCM_BOOL_F; break; } case KvpValue::Type::GUID: { auto tempguid = val->get<GncGUID*>(); return gnc_guid2scm(*tempguid); } break; case KvpValue::Type::TIMESPEC: return gnc_timespec2timepair(val->get<Timespec>()); break; case KvpValue::Type::FRAME: { auto frame = val->get<KvpFrame*>(); if (frame != nullptr) return SWIG_NewPointerObj(frame, SWIG_TypeQuery("_p_KvpFrame"), 0); } break; case KvpValue::Type::GDATE: return gnc_timespec2timepair(gdate_to_timespec(val->get<GDate>())); /* FIXME: handle types below */ case KvpValue::Type::GLIST: default: break; } return SCM_BOOL_F; }
/********************************************************************\ * gnc_trans_scm_set_date * * set the date of a scheme transaction. * * * * Args: trans_scm - the scheme transaction * * ts - the time to set * * Returns: Nothing * \********************************************************************/ void gnc_trans_scm_set_date(SCM trans_scm, Timespec *ts) { SCM arg; initialize_scm_functions(); if (!gnc_is_trans_scm(trans_scm)) return; if (ts == NULL) return; arg = gnc_timespec2timepair(*ts); scm_call_2(setters.trans_scm_date, trans_scm, arg); }