Merge pull request #9 from osyo-manga/example_prototype

add example
This commit is contained in:
Bolero MURAKAMI 2012-05-24 00:47:10 -07:00
commit dc8cb3d14e
2 changed files with 111 additions and 0 deletions

View file

@ -0,0 +1,44 @@
//
// Sprout C++ Library
//
// Copyright (c) 2012
// bolero-MURAKAMI : http://d.hatena.ne.jp/boleros/
// osyo-manga : http://d.hatena.ne.jp/osyo-manga/
//
// Readme:
// https://github.com/bolero-MURAKAMI/Sprout/blob/master/README
//
// License:
// Boost Software License - Version 1.0
// <http://www.boost.org/LICENSE_1_0.txt>
//
#include <sprout/string.hpp>
//
// C style string to Sprout.String
//
int
main(){
constexpr char const* c_str = "homu";
//
// String length is required
//
constexpr auto length = sprout::char_traits<char>::length(c_str);
static_assert(length == 4, "");
//
// To Sprout.String
//
constexpr auto str = sprout::string_from_c_str<length>( c_str );
static_assert(std::is_same<sprout::string<4> const, decltype(str)>{}, "");
static_assert(str == "homu", "");
constexpr auto str2 = sprout::string_from_c_str<length>( c_str, 2 );
static_assert(std::is_same<sprout::string<4> const, decltype(str2)>{}, "");
static_assert(str2 == "ho", "");
return 0;
}

View file

@ -0,0 +1,67 @@
//
// Sprout C++ Library
//
// Copyright (c) 2012
// bolero-MURAKAMI : http://d.hatena.ne.jp/boleros/
// osyo-manga : http://d.hatena.ne.jp/osyo-manga/
//
// Readme:
// https://github.com/bolero-MURAKAMI/Sprout/blob/master/README
//
// License:
// Boost Software License - Version 1.0
// <http://www.boost.org/LICENSE_1_0.txt>
//
#include <sprout/weed.hpp>
int
main(){
namespace w = sprout::weed;
static constexpr auto source = sprout::to_string("homu:mado");
// String parser
static constexpr auto item = *w::lim<4>(w::char_ - ':');
//
// If you do not want to use the as_tuple
//
{
static constexpr auto parser = item >> ':' >> item;
static constexpr auto result = w::parse(
sprout::begin(source), sprout::end(source), parser
);
static_assert(result.success(), "");
// !!!!
static_assert(result.attr() == "homumado", "");
}
//
// You need to use the as_tuple
//
{
static constexpr auto parser = w::as_tuple[item] >> ':' >> w::as_tuple[item];
static constexpr auto result = w::parse(
sprout::begin(source), sprout::end(source), parser
);
static_assert(result.success(), "");
static constexpr auto attr = result.attr();
// OK
static_assert(std::is_same<
sprout::tuple<sprout::string<4>, sprout::string<4>> const,
decltype(attr)
>::value, "");
static_assert(sprout::get<0>(attr) == "homu", "");
static_assert(sprout::get<1>(attr) == "mado", "");
}
return 0;
}