diff --git a/README.md b/README.md index c292af1..a11ff75 100644 --- a/README.md +++ b/README.md @@ -507,9 +507,9 @@ You can check what type of value does `toml::value` contains by `is_*` function. ```cpp toml::value v = /* ... */; -if(v.is_integer() && toml::get(v) == 42) +if(v.is_integer()) { - std::cout << "value is 42" << std::endl; + std::cout << "value is an integer" << std::endl; } ``` @@ -553,6 +553,36 @@ toml::value v = /* ... */; if(v.is(toml::value_t::Boolean)) // ... ``` +## Casting value + +So far, `toml::get` is introduced, but if you don't need any type conversion, +`as_*` is simpler to use. + +```cpp +toml::value v = /* ... */; +if(v.is_integer() && v.as_integer() == 42) +{ + std::cout << "value is 42" << std::endl; +} +``` + +The complete list of the functions is below. + +```cpp +const toml::value v(/*...*/); +v.as_boolean(); +v.as_integer(); +v.as_float(); +v.as_string(); +v.as_offset_datetime(); +v.as_local_datetime(); +v.as_local_date(); +v.as_local_time(); +v.as_array(); +v.as_table(); +v.as_uninitialized(); +``` + ## Visiting a toml::value toml11 provides `toml::visit` to apply a function to `toml::value` in the diff --git a/tests/test_value.cpp b/tests/test_value.cpp index 2faaa99..0471291 100644 --- a/tests/test_value.cpp +++ b/tests/test_value.cpp @@ -30,6 +30,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), false); v1 = false; v2 = true; @@ -45,6 +47,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v1.cast(), false); BOOST_CHECK_EQUAL(v2.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), false); + BOOST_CHECK_EQUAL(v2.as_boolean(), true); toml::value v3(v1); toml::value v4(v2); @@ -62,6 +66,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v3.cast(), false); BOOST_CHECK_EQUAL(v4.cast(), true); + BOOST_CHECK_EQUAL(v3.as_boolean(), false); + BOOST_CHECK_EQUAL(v4.as_boolean(), true); toml::value v5(std::move(v1)); toml::value v6(std::move(v2)); @@ -77,6 +83,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v5.cast(), false); BOOST_CHECK_EQUAL(v6.cast(), true); + BOOST_CHECK_EQUAL(v5.as_boolean(), false); + BOOST_CHECK_EQUAL(v6.as_boolean(), true); v1 = 42; v2 = 3.14; @@ -92,6 +100,8 @@ BOOST_AUTO_TEST_CASE(test_value_boolean) BOOST_CHECK_EQUAL(v1.cast(), 42); BOOST_CHECK_EQUAL(v2.cast(), 3.14); + BOOST_CHECK_EQUAL(v1.as_integer(), 42); + BOOST_CHECK_EQUAL(v2.as_float(), 3.14); } BOOST_AUTO_TEST_CASE(test_value_integer) @@ -110,6 +120,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v1.cast(), -42); BOOST_CHECK_EQUAL(v2.cast(), 42u); + BOOST_CHECK_EQUAL(v1.as_integer(), -42); + BOOST_CHECK_EQUAL(v2.as_integer(), 42u); v1 = 54; v2 = -54; @@ -125,6 +137,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v1.cast(), 54); BOOST_CHECK_EQUAL(v2.cast(), -54); + BOOST_CHECK_EQUAL(v1.as_integer(), 54); + BOOST_CHECK_EQUAL(v2.as_integer(), -54); toml::value v3(v1); toml::value v4(v2); @@ -142,6 +156,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v3.cast(), 54); BOOST_CHECK_EQUAL(v4.cast(), -54); + BOOST_CHECK_EQUAL(v3.as_integer(), 54); + BOOST_CHECK_EQUAL(v4.as_integer(), -54); toml::value v5(std::move(v1)); toml::value v6(std::move(v2)); @@ -157,6 +173,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v5.cast(), 54); BOOST_CHECK_EQUAL(v6.cast(), -54); + BOOST_CHECK_EQUAL(v5.as_integer(), 54); + BOOST_CHECK_EQUAL(v6.as_integer(), -54); v1 = true; v2 = false; @@ -172,6 +190,8 @@ BOOST_AUTO_TEST_CASE(test_value_integer) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), false); } BOOST_AUTO_TEST_CASE(test_value_float) @@ -188,8 +208,10 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v1.is_float()); BOOST_CHECK(v2.is_float()); - BOOST_CHECK_EQUAL(v1.cast(), 3.14); + BOOST_CHECK_EQUAL (v1.cast(), 3.14); BOOST_CHECK_CLOSE_FRACTION(v2.cast(), 3.14, 1e-2); + BOOST_CHECK_EQUAL (v1.as_float(), 3.14); + BOOST_CHECK_CLOSE_FRACTION(v2.as_float(), 3.14, 1e-2); v1 = 2.718f; v2 = 2.718; @@ -204,7 +226,9 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v2.is_float()); BOOST_CHECK_CLOSE_FRACTION(v1.cast(), 2.718, 1e-3); - BOOST_CHECK_EQUAL(v2.cast(), 2.718); + BOOST_CHECK_EQUAL (v2.cast(), 2.718); + BOOST_CHECK_CLOSE_FRACTION(v1.as_float(), 2.718, 1e-3); + BOOST_CHECK_EQUAL (v2.as_float(), 2.718); toml::value v3(v1); toml::value v4(v2); @@ -221,7 +245,9 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v4.is_float()); BOOST_CHECK_CLOSE_FRACTION(v3.cast(), 2.718, 1e-3); - BOOST_CHECK_EQUAL(v4.cast(), 2.718); + BOOST_CHECK_EQUAL (v4.cast(), 2.718); + BOOST_CHECK_CLOSE_FRACTION(v3.as_float(), 2.718, 1e-3); + BOOST_CHECK_EQUAL (v4.as_float(), 2.718); toml::value v5(std::move(v1)); toml::value v6(std::move(v2)); @@ -236,7 +262,9 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK(v6.is_float()); BOOST_CHECK_CLOSE_FRACTION(v5.cast(), 2.718, 1e-3); - BOOST_CHECK_EQUAL(v6.cast(), 2.718); + BOOST_CHECK_EQUAL (v6.cast(), 2.718); + BOOST_CHECK_CLOSE_FRACTION(v5.as_float(), 2.718, 1e-3); + BOOST_CHECK_EQUAL (v6.as_float(), 2.718); v1 = true; v2 = false; @@ -252,6 +280,8 @@ BOOST_AUTO_TEST_CASE(test_value_float) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), false); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), false); } BOOST_AUTO_TEST_CASE(test_value_string) @@ -276,6 +306,10 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v1.cast(), "foo"); BOOST_CHECK_EQUAL(v2.cast(), "foo"); BOOST_CHECK_EQUAL(v3.cast(), "foo"); + BOOST_CHECK_EQUAL(v1.as_string(), "foo"); + BOOST_CHECK_EQUAL(v2.as_string(), "foo"); + BOOST_CHECK_EQUAL(v3.as_string(), "foo"); + v1 = "bar"; v2 = "bar"; @@ -294,6 +328,10 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v1.cast(), "bar"); BOOST_CHECK_EQUAL(v2.cast(), "bar"); BOOST_CHECK_EQUAL(v3.cast(), "bar"); + BOOST_CHECK_EQUAL(v1.as_string(), "bar"); + BOOST_CHECK_EQUAL(v2.as_string(), "bar"); + BOOST_CHECK_EQUAL(v3.as_string(), "bar"); + toml::value v4(v1); toml::value v5(v2); @@ -318,6 +356,10 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v4.cast(), "bar"); BOOST_CHECK_EQUAL(v5.cast(), "bar"); BOOST_CHECK_EQUAL(v6.cast(), "bar"); + BOOST_CHECK_EQUAL(v4.as_string(), "bar"); + BOOST_CHECK_EQUAL(v5.as_string(), "bar"); + BOOST_CHECK_EQUAL(v6.as_string(), "bar"); + v4.cast().str.at(2) = 'z'; v5.cast().str.at(2) = 'z'; @@ -336,9 +378,9 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK(v5.is_string()); BOOST_CHECK(v6.is_string()); - BOOST_CHECK_EQUAL(v4.cast(), "baz"); - BOOST_CHECK_EQUAL(v5.cast(), "baz"); - BOOST_CHECK_EQUAL(v6.cast(), "baz"); + BOOST_CHECK_EQUAL(v4.as_string(), "baz"); + BOOST_CHECK_EQUAL(v5.as_string(), "baz"); + BOOST_CHECK_EQUAL(v6.as_string(), "baz"); v1 = true; v2 = true; @@ -360,6 +402,9 @@ BOOST_AUTO_TEST_CASE(test_value_string) BOOST_CHECK_EQUAL(v1.cast(), true); BOOST_CHECK_EQUAL(v2.cast(), true); BOOST_CHECK_EQUAL(v3.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); + BOOST_CHECK_EQUAL(v2.as_boolean(), true); + BOOST_CHECK_EQUAL(v3.as_boolean(), true); #if __cplusplus >= 201703L std::string_view sv = "foo"; @@ -392,6 +437,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK_EQUAL(v1.cast(), toml::local_date(2018, toml::month_t::Jan, 31)); + BOOST_CHECK_EQUAL(v1.as_local_date(), + toml::local_date(2018, toml::month_t::Jan, 31)); v1 = toml::local_date(2018, toml::month_t::Apr, 1); @@ -402,6 +449,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK_EQUAL(v1.cast(), toml::local_date(2018, toml::month_t::Apr, 1)); + BOOST_CHECK_EQUAL(v1.as_local_date(), + toml::local_date(2018, toml::month_t::Apr, 1)); toml::value v2(v1); BOOST_CHECK(v2 == v1); @@ -413,6 +462,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK_EQUAL(v2.cast(), toml::local_date(2018, toml::month_t::Apr, 1)); + BOOST_CHECK_EQUAL(v2.as_local_date(), + toml::local_date(2018, toml::month_t::Apr, 1)); v1 = true; BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); @@ -420,6 +471,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_date) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_local_time) @@ -439,10 +491,18 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK_EQUAL(v1.cast(), toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v1.as_local_time(), + toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v2.cast(), toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v2.as_local_time(), + toml::local_time(12, 30, 45)); + BOOST_CHECK_EQUAL(v1.cast(), v2.cast()); + BOOST_CHECK_EQUAL(v1.as_local_time(), + v2.as_local_time()); v1 = toml::local_time(1, 30, 0, /*ms*/ 100, /*us*/ 0); @@ -452,6 +512,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK(v1.is_local_time()); BOOST_CHECK_EQUAL(v1.cast(), toml::local_time(1, 30, 0, 100, 0)); + BOOST_CHECK_EQUAL(v1.as_local_time(), + toml::local_time(1, 30, 0, 100, 0)); toml::value v3(v1); BOOST_CHECK(v3 == v1); @@ -463,6 +525,8 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK_EQUAL(v3.cast(), toml::local_time(1, 30, 0, 100, 0)); + BOOST_CHECK_EQUAL(v3.as_local_time(), + toml::local_time(1, 30, 0, 100, 0)); v1 = true; BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); @@ -470,6 +534,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_time) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_local_datetime) @@ -488,6 +553,10 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime) toml::local_datetime( toml::local_date(2018, toml::month_t::Jan, 31), toml::local_time(12, 30, 45))); + BOOST_CHECK_EQUAL(v1.as_local_datetime(), + toml::local_datetime( + toml::local_date(2018, toml::month_t::Jan, 31), + toml::local_time(12, 30, 45))); v1 = toml::local_datetime( toml::local_date(2018, toml::month_t::Apr, 1), @@ -502,6 +571,10 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime) toml::local_datetime( toml::local_date(2018, toml::month_t::Apr, 1), toml::local_time(1, 15, 30))); + BOOST_CHECK_EQUAL(v1.as_local_datetime(), + toml::local_datetime( + toml::local_date(2018, toml::month_t::Apr, 1), + toml::local_time(1, 15, 30))); toml::value v2(v1); BOOST_CHECK(v2 == v1); @@ -515,6 +588,11 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime) toml::local_datetime( toml::local_date(2018, toml::month_t::Apr, 1), toml::local_time(1, 15, 30))); + BOOST_CHECK_EQUAL(v2.as_local_datetime(), + toml::local_datetime( + toml::local_date(2018, toml::month_t::Apr, 1), + toml::local_time(1, 15, 30))); + v1 = true; BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); @@ -522,6 +600,7 @@ BOOST_AUTO_TEST_CASE(test_value_local_datetime) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_offset_datetime) @@ -543,6 +622,12 @@ BOOST_AUTO_TEST_CASE(test_value_offset_datetime) toml::local_time(12, 30, 45), toml::time_offset(9, 0) )); + BOOST_CHECK_EQUAL(v1.as_offset_datetime(), + toml::offset_datetime( + toml::local_date(2018, toml::month_t::Jan, 31), + toml::local_time(12, 30, 45), + toml::time_offset(9, 0) + )); v1 = toml::offset_datetime( toml::local_date(2018, toml::month_t::Apr, 1), @@ -559,6 +644,12 @@ BOOST_AUTO_TEST_CASE(test_value_offset_datetime) toml::local_date(2018, toml::month_t::Apr, 1), toml::local_time(1, 15, 30), toml::time_offset(9, 0))); + BOOST_CHECK_EQUAL(v1.as_offset_datetime(), + toml::offset_datetime( + toml::local_date(2018, toml::month_t::Apr, 1), + toml::local_time(1, 15, 30), + toml::time_offset(9, 0))); + toml::value v2(v1); BOOST_CHECK(v2 == v1); @@ -573,12 +664,19 @@ BOOST_AUTO_TEST_CASE(test_value_offset_datetime) toml::local_date(2018, toml::month_t::Apr, 1), toml::local_time(1, 15, 30), toml::time_offset(9, 0))); + BOOST_CHECK_EQUAL(v2.as_offset_datetime(), + toml::offset_datetime( + toml::local_date(2018, toml::month_t::Apr, 1), + toml::local_time(1, 15, 30), + toml::time_offset(9, 0))); + v1 = true; BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); BOOST_CHECK(v1.is(toml::value_t::Boolean)); BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_array) @@ -602,6 +700,12 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK_EQUAL(v1.cast().at(2).cast(), 3); BOOST_CHECK_EQUAL(v1.cast().at(3).cast(), 4); BOOST_CHECK_EQUAL(v1.cast().at(4).cast(), 5); + BOOST_CHECK_EQUAL(v1.as_array().at(0).as_integer(), 1); + BOOST_CHECK_EQUAL(v1.as_array().at(1).as_integer(), 2); + BOOST_CHECK_EQUAL(v1.as_array().at(2).as_integer(), 3); + BOOST_CHECK_EQUAL(v1.as_array().at(3).as_integer(), 4); + BOOST_CHECK_EQUAL(v1.as_array().at(4).as_integer(), 5); + BOOST_CHECK_EQUAL(v2.cast().at(0).cast(), 6); BOOST_CHECK_EQUAL(v2.cast().at(1).cast(), 7); @@ -627,12 +731,24 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK_EQUAL(v1.cast().at(2).cast(), 8); BOOST_CHECK_EQUAL(v1.cast().at(3).cast(), 9); BOOST_CHECK_EQUAL(v1.cast().at(4).cast(), 0); + BOOST_CHECK_EQUAL(v1.as_array().at(0).as_integer(), 6); + BOOST_CHECK_EQUAL(v1.as_array().at(1).as_integer(), 7); + BOOST_CHECK_EQUAL(v1.as_array().at(2).as_integer(), 8); + BOOST_CHECK_EQUAL(v1.as_array().at(3).as_integer(), 9); + BOOST_CHECK_EQUAL(v1.as_array().at(4).as_integer(), 0); + BOOST_CHECK_EQUAL(v2.cast().at(0).cast(), 1); BOOST_CHECK_EQUAL(v2.cast().at(1).cast(), 2); BOOST_CHECK_EQUAL(v2.cast().at(2).cast(), 3); BOOST_CHECK_EQUAL(v2.cast().at(3).cast(), 4); BOOST_CHECK_EQUAL(v2.cast().at(4).cast(), 5); + BOOST_CHECK_EQUAL(v2.as_array().at(0).as_integer(), 1); + BOOST_CHECK_EQUAL(v2.as_array().at(1).as_integer(), 2); + BOOST_CHECK_EQUAL(v2.as_array().at(2).as_integer(), 3); + BOOST_CHECK_EQUAL(v2.as_array().at(3).as_integer(), 4); + BOOST_CHECK_EQUAL(v2.as_array().at(4).as_integer(), 5); + toml::value v3(v1); BOOST_CHECK(v3 == v1); @@ -647,6 +763,12 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK_EQUAL(v3.cast().at(2).cast(), 8); BOOST_CHECK_EQUAL(v3.cast().at(3).cast(), 9); BOOST_CHECK_EQUAL(v3.cast().at(4).cast(), 0); + BOOST_CHECK_EQUAL(v3.as_array().at(0).as_integer(), 6); + BOOST_CHECK_EQUAL(v3.as_array().at(1).as_integer(), 7); + BOOST_CHECK_EQUAL(v3.as_array().at(2).as_integer(), 8); + BOOST_CHECK_EQUAL(v3.as_array().at(3).as_integer(), 9); + BOOST_CHECK_EQUAL(v3.as_array().at(4).as_integer(), 0); + v1 = true; BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); @@ -654,6 +776,7 @@ BOOST_AUTO_TEST_CASE(test_value_array) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_table) @@ -668,6 +791,10 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK_EQUAL(v1.cast().at("foo").cast(), 42); BOOST_CHECK_EQUAL(v1.cast().at("bar").cast(), 3.14); BOOST_CHECK_EQUAL(v1.cast().at("baz").cast().str, "qux"); + BOOST_CHECK_EQUAL(v1.as_table().at("foo").as_integer(), 42); + BOOST_CHECK_EQUAL(v1.as_table().at("bar").as_float(), 3.14); + BOOST_CHECK_EQUAL(v1.as_table().at("baz").as_string().str, "qux"); + v1 = toml::table{{"foo", 2.71}, {"bar", 54}, {"baz", "quux"}}; @@ -679,6 +806,10 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK_EQUAL(v1.cast().at("foo").cast(), 2.71); BOOST_CHECK_EQUAL(v1.cast().at("bar").cast(), 54); BOOST_CHECK_EQUAL(v1.cast().at("baz").cast().str, "quux"); + BOOST_CHECK_EQUAL(v1.as_table().at("foo").as_float(), 2.71); + BOOST_CHECK_EQUAL(v1.as_table().at("bar").as_integer(), 54); + BOOST_CHECK_EQUAL(v1.as_table().at("baz").as_string().str, "quux"); + toml::value v3(v1); BOOST_CHECK(v3 == v1); @@ -691,6 +822,10 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK_EQUAL(v3.cast().at("foo").cast(), 2.71); BOOST_CHECK_EQUAL(v3.cast().at("bar").cast(), 54); BOOST_CHECK_EQUAL(v3.cast().at("baz").cast().str, "quux"); + BOOST_CHECK_EQUAL(v3.as_table().at("foo").as_float(), 2.71); + BOOST_CHECK_EQUAL(v3.as_table().at("bar").as_integer(), 54); + BOOST_CHECK_EQUAL(v3.as_table().at("baz").as_string().str, "quux"); + v1 = true; BOOST_CHECK_EQUAL(v1.type(), toml::value_t::Boolean); @@ -698,6 +833,7 @@ BOOST_AUTO_TEST_CASE(test_value_table) BOOST_CHECK(v1.is()); BOOST_CHECK(v1.is_boolean()); BOOST_CHECK_EQUAL(v1.cast(), true); + BOOST_CHECK_EQUAL(v1.as_boolean(), true); } BOOST_AUTO_TEST_CASE(test_value_empty) diff --git a/toml/value.hpp b/toml/value.hpp index 9fa88dc..e1cced5 100644 --- a/toml/value.hpp +++ b/toml/value.hpp @@ -633,6 +633,28 @@ class value template typename detail::toml_default_type::type&& cast() &&; + boolean const& as_boolean() const {return this->cast();} + integer const& as_integer() const {return this->cast();} + floating const& as_float() const {return this->cast();} + string const& as_string() const {return this->cast();} + offset_datetime const& as_offset_datetime() const {return this->cast();} + local_datetime const& as_local_datetime() const {return this->cast();} + local_date const& as_local_date() const {return this->cast();} + local_time const& as_local_time() const {return this->cast();} + array const& as_array() const {return this->cast();} + table const& as_table() const {return this->cast();} + + boolean& as_boolean() {return this->cast();} + integer& as_integer() {return this->cast();} + floating& as_float() {return this->cast();} + string& as_string() {return this->cast();} + offset_datetime& as_offset_datetime() {return this->cast();} + local_datetime& as_local_datetime() {return this->cast();} + local_date& as_local_date() {return this->cast();} + local_time& as_local_time() {return this->cast();} + array& as_array() {return this->cast();} + table& as_table() {return this->cast();} + std::string comment() const { return this->region_info_->comment();