mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Replace the gnc_make_foo_option free functions with a template ctor.
The free functions will reappear for GncOptionDB. This is to avoid having to pass naked pointers to Scheme with the attendant object lifetime issues.
This commit is contained in:
parent
01dc70cc60
commit
d88ec0dc1b
@ -51,60 +51,3 @@ scm_from_value<QofInstance*>(QofInstance* value)
|
|||||||
return scm_guid;
|
return scm_guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_string_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
std::string value)
|
|
||||||
{
|
|
||||||
GncOptionValue<std::string> retval {
|
|
||||||
section, name, key, doc_string, value
|
|
||||||
};
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_text_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
std::string value)
|
|
||||||
{
|
|
||||||
return gnc_make_string_option(section, name, key, doc_string, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_budget_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
GncBudget *value)
|
|
||||||
{
|
|
||||||
GncOptionValue<QofInstance*> retval {
|
|
||||||
section, name, key, doc_string, QOF_INSTANCE(value)
|
|
||||||
};
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_commodity_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
gnc_commodity *value)
|
|
||||||
{
|
|
||||||
GncOptionValue<QofInstance*> retval {
|
|
||||||
section, name, key, doc_string, QOF_INSTANCE(value)
|
|
||||||
};
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_currency_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
gnc_commodity *value)
|
|
||||||
{
|
|
||||||
GncOptionValidatedValue<QofInstance*> retval {
|
|
||||||
section, name, key, doc_string, QOF_INSTANCE(value),
|
|
||||||
[](QofInstance* new_value) -> bool
|
|
||||||
{
|
|
||||||
return GNC_IS_COMMODITY (new_value) &&
|
|
||||||
gnc_commodity_is_currency(GNC_COMMODITY(new_value));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
@ -199,6 +199,14 @@ public:
|
|||||||
template <typename OptionType>
|
template <typename OptionType>
|
||||||
GncOption(OptionType option) : m_option{option} {}
|
GncOption(OptionType option) : m_option{option} {}
|
||||||
|
|
||||||
|
template <typename ValueType>
|
||||||
|
GncOption(const char* section, const char* name,
|
||||||
|
const char* key, const char* doc_string,
|
||||||
|
ValueType value) :
|
||||||
|
m_option{GncOptionValue<ValueType> {
|
||||||
|
section, name, key, doc_string, value
|
||||||
|
}} {}
|
||||||
|
|
||||||
template <typename ValueType> ValueType get_value() const
|
template <typename ValueType> ValueType get_value() const
|
||||||
{
|
{
|
||||||
return boost::apply_visitor(GetValueVisitor<ValueType>(), m_option);
|
return boost::apply_visitor(GetValueVisitor<ValueType>(), m_option);
|
||||||
@ -326,30 +334,4 @@ private:
|
|||||||
GncOptionVariant m_option;
|
GncOptionVariant m_option;
|
||||||
};
|
};
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_string_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
std::string value);
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_text_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
std::string value);
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_budget_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
GncBudget* value);
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_commodity_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
gnc_commodity* value);
|
|
||||||
|
|
||||||
GncOption
|
|
||||||
gnc_make_currency_option(const char* section, const char* name,
|
|
||||||
const char* key, const char* doc_string,
|
|
||||||
gnc_commodity* value);
|
|
||||||
|
|
||||||
|
|
||||||
#endif //GNC_OPTION_HPP_
|
#endif //GNC_OPTION_HPP_
|
||||||
|
@ -27,25 +27,14 @@
|
|||||||
TEST(GncOption, test_string_ctor)
|
TEST(GncOption, test_string_ctor)
|
||||||
{
|
{
|
||||||
EXPECT_NO_THROW({
|
EXPECT_NO_THROW({
|
||||||
auto option = gnc_make_string_option("foo", "bar", "baz",
|
GncOption option("foo", "bar", "baz", "Phony Option",
|
||||||
"Phony Option",
|
|
||||||
std::string{"waldo"});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(GncOption, test_text_ctor)
|
|
||||||
{
|
|
||||||
EXPECT_NO_THROW({
|
|
||||||
auto option = gnc_make_text_option("foo", "bar", "baz",
|
|
||||||
"Phony Option",
|
|
||||||
std::string{"waldo"});
|
std::string{"waldo"});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(GncOption, test_string_classifier_getters)
|
TEST(GncOption, test_string_classifier_getters)
|
||||||
{
|
{
|
||||||
auto option = gnc_make_string_option("foo", "bar", "baz", "Phony Option",
|
GncOption option("foo", "bar", "baz", "Phony Option", std::string{"waldo"});
|
||||||
std::string{"waldo"});
|
|
||||||
EXPECT_STREQ("foo", option.get_section().c_str());
|
EXPECT_STREQ("foo", option.get_section().c_str());
|
||||||
EXPECT_STREQ("bar", option.get_name().c_str());
|
EXPECT_STREQ("bar", option.get_name().c_str());
|
||||||
EXPECT_STREQ("baz", option.get_key().c_str());
|
EXPECT_STREQ("baz", option.get_key().c_str());
|
||||||
@ -54,16 +43,14 @@ TEST(GncOption, test_string_classifier_getters)
|
|||||||
|
|
||||||
TEST(GncOption, test_string_default_value)
|
TEST(GncOption, test_string_default_value)
|
||||||
{
|
{
|
||||||
auto option = gnc_make_string_option("foo", "bar", "baz", "Phony Option",
|
GncOption option("foo", "bar", "baz", "Phony Option", std::string{"waldo"});
|
||||||
std::string{"waldo"});
|
|
||||||
EXPECT_STREQ("waldo", option.get_default_value<std::string>().c_str());
|
EXPECT_STREQ("waldo", option.get_default_value<std::string>().c_str());
|
||||||
EXPECT_STREQ("waldo", option.get_value<std::string>().c_str());
|
EXPECT_STREQ("waldo", option.get_value<std::string>().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(GncOption, test_string_value)
|
TEST(GncOption, test_string_value)
|
||||||
{
|
{
|
||||||
auto option = gnc_make_string_option("foo", "bar", "baz", "Phony Option",
|
GncOption option("foo", "bar", "baz", "Phony Option", std::string{"waldo"});
|
||||||
std::string{"waldo"});
|
|
||||||
option.set_value(std::string{"pepper"});
|
option.set_value(std::string{"pepper"});
|
||||||
EXPECT_STREQ("waldo", option.get_default_value<std::string>().c_str());
|
EXPECT_STREQ("waldo", option.get_default_value<std::string>().c_str());
|
||||||
EXPECT_NO_THROW({
|
EXPECT_NO_THROW({
|
||||||
@ -73,8 +60,7 @@ TEST(GncOption, test_string_value)
|
|||||||
|
|
||||||
TEST(GncOption, test_string_scm_functions)
|
TEST(GncOption, test_string_scm_functions)
|
||||||
{
|
{
|
||||||
auto option = gnc_make_string_option("foo", "bar", "baz", "Phony Option",
|
GncOption option("foo", "bar", "baz", "Phony Option", std::string{"waldo"});
|
||||||
std::string{"waldo"});
|
|
||||||
auto scm_value = option.get_scm_value();
|
auto scm_value = option.get_scm_value();
|
||||||
auto str_value = scm_to_utf8_string(scm_value);
|
auto str_value = scm_to_utf8_string(scm_value);
|
||||||
EXPECT_STREQ("waldo", str_value);
|
EXPECT_STREQ("waldo", str_value);
|
||||||
@ -90,8 +76,8 @@ TEST(GNCOption, test_budget_ctor)
|
|||||||
auto book = qof_book_new();
|
auto book = qof_book_new();
|
||||||
auto budget = gnc_budget_new(book);
|
auto budget = gnc_budget_new(book);
|
||||||
EXPECT_NO_THROW({
|
EXPECT_NO_THROW({
|
||||||
auto option = gnc_make_budget_option("foo", "bar", "baz",
|
GncOption option("foo", "bar", "baz", "Phony Option",
|
||||||
"Phony Option", budget);
|
QOF_INSTANCE(budget));
|
||||||
});
|
});
|
||||||
gnc_budget_destroy(budget);
|
gnc_budget_destroy(budget);
|
||||||
qof_book_destroy(book);
|
qof_book_destroy(book);
|
||||||
@ -101,8 +87,8 @@ TEST(GNCOption, test_budget_scm_functions)
|
|||||||
{
|
{
|
||||||
auto book = qof_book_new();
|
auto book = qof_book_new();
|
||||||
auto budget = gnc_budget_new(book);
|
auto budget = gnc_budget_new(book);
|
||||||
auto option = gnc_make_budget_option("foo", "bar", "baz",
|
GncOption option("foo", "bar", "baz", "Phony Option",
|
||||||
"Phony Option", budget);
|
QOF_INSTANCE(budget));
|
||||||
auto scm_budget = option.get_scm_value();
|
auto scm_budget = option.get_scm_value();
|
||||||
auto str_value = scm_to_utf8_string(scm_budget);
|
auto str_value = scm_to_utf8_string(scm_budget);
|
||||||
auto guid = guid_to_string(qof_instance_get_guid(budget));
|
auto guid = guid_to_string(qof_instance_get_guid(budget));
|
||||||
@ -118,12 +104,27 @@ TEST(GNCOption, test_commodity_ctor)
|
|||||||
auto hpe = gnc_commodity_new(book, "Hewlett Packard Enterprise, Inc.",
|
auto hpe = gnc_commodity_new(book, "Hewlett Packard Enterprise, Inc.",
|
||||||
"NYSE", "HPE", NULL, 1);
|
"NYSE", "HPE", NULL, 1);
|
||||||
EXPECT_NO_THROW({
|
EXPECT_NO_THROW({
|
||||||
auto option = gnc_make_commodity_option("foo", "bar", "baz",
|
GncOption option("foo", "bar", "baz", "Phony Option",
|
||||||
"Phony Option", hpe);
|
QOF_INSTANCE(hpe));
|
||||||
});
|
});
|
||||||
gnc_commodity_destroy(hpe);
|
gnc_commodity_destroy(hpe);
|
||||||
qof_book_destroy(book);
|
qof_book_destroy(book);
|
||||||
}
|
}
|
||||||
|
static GncOption
|
||||||
|
make_currency_option (const char* section, const char* name,
|
||||||
|
const char* key, const char* doc_string,
|
||||||
|
gnc_commodity *value)
|
||||||
|
{
|
||||||
|
GncOption option{GncOptionValidatedValue<QofInstance*>{
|
||||||
|
section, name, key, doc_string, QOF_INSTANCE(value),
|
||||||
|
[](QofInstance* new_value) -> bool
|
||||||
|
{
|
||||||
|
return GNC_IS_COMMODITY (new_value) &&
|
||||||
|
gnc_commodity_is_currency(GNC_COMMODITY(new_value));
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
|
||||||
TEST(GNCOption, test_currency_ctor)
|
TEST(GNCOption, test_currency_ctor)
|
||||||
{
|
{
|
||||||
@ -133,20 +134,20 @@ TEST(GNCOption, test_currency_ctor)
|
|||||||
auto hpe = gnc_commodity_new(book, "Hewlett Packard Enterprise, Inc.",
|
auto hpe = gnc_commodity_new(book, "Hewlett Packard Enterprise, Inc.",
|
||||||
"NYSE", "HPE", NULL, 1);
|
"NYSE", "HPE", NULL, 1);
|
||||||
EXPECT_THROW({
|
EXPECT_THROW({
|
||||||
auto option = gnc_make_currency_option("foo", "bar", "baz",
|
auto option = make_currency_option("foo", "bar", "baz",
|
||||||
"Phony Option", hpe);
|
"Phony Option", hpe);
|
||||||
}, std::invalid_argument);
|
}, std::invalid_argument);
|
||||||
gnc_commodity_destroy(hpe);
|
gnc_commodity_destroy(hpe);
|
||||||
auto eur = gnc_commodity_new(book, "Euro", "ISO4217", "EUR", NULL, 100);
|
auto eur = gnc_commodity_new(book, "Euro", "ISO4217", "EUR", NULL, 100);
|
||||||
EXPECT_NO_THROW({
|
EXPECT_NO_THROW({
|
||||||
auto option = gnc_make_currency_option("foo", "bar", "baz",
|
auto option = make_currency_option("foo", "bar", "baz",
|
||||||
"Phony Option", eur);
|
"Phony Option", eur);
|
||||||
});
|
});
|
||||||
gnc_commodity_destroy(eur);
|
gnc_commodity_destroy(eur);
|
||||||
auto usd = gnc_commodity_new(book, "United States Dollar",
|
auto usd = gnc_commodity_new(book, "United States Dollar",
|
||||||
"CURRENCY", "USD", NULL, 100);
|
"CURRENCY", "USD", NULL, 100);
|
||||||
EXPECT_NO_THROW({
|
EXPECT_NO_THROW({
|
||||||
auto option = gnc_make_currency_option("foo", "bar", "baz",
|
auto option = make_currency_option("foo", "bar", "baz",
|
||||||
"Phony Option",usd);
|
"Phony Option",usd);
|
||||||
});
|
});
|
||||||
gnc_commodity_destroy(usd);
|
gnc_commodity_destroy(usd);
|
||||||
@ -163,7 +164,7 @@ TEST(GNCOption, test_currency_setter)
|
|||||||
auto hpe = gnc_commodity_new(book, "Hewlett Packard Enterprise, Inc.",
|
auto hpe = gnc_commodity_new(book, "Hewlett Packard Enterprise, Inc.",
|
||||||
"NYSE", "HPE", NULL, 1);
|
"NYSE", "HPE", NULL, 1);
|
||||||
auto eur = gnc_commodity_new(book, "Euro", "ISO4217", "EUR", NULL, 100);
|
auto eur = gnc_commodity_new(book, "Euro", "ISO4217", "EUR", NULL, 100);
|
||||||
auto option = gnc_make_currency_option("foo", "bar", "baz",
|
auto option = make_currency_option("foo", "bar", "baz",
|
||||||
"Phony Option",eur);
|
"Phony Option",eur);
|
||||||
auto usd = gnc_commodity_new(book, "United States Dollar",
|
auto usd = gnc_commodity_new(book, "United States Dollar",
|
||||||
"CURRENCY", "USD", NULL, 100);
|
"CURRENCY", "USD", NULL, 100);
|
||||||
|
Loading…
Reference in New Issue
Block a user