more documentation

This commit is contained in:
Daniel Sipka 2015-04-24 14:47:12 +02:00
parent 690cdf852d
commit a478af2a27
3 changed files with 47 additions and 11 deletions

View file

@ -2,7 +2,8 @@
![mstch logo](http://i.imgur.com/XAdHwUs.png) ![mstch logo](http://i.imgur.com/XAdHwUs.png)
mstch is a complete implementation of [{{mustache}}](http://mustache.github.io/) templates using modern C++. mstch is a complete implementation of [{{mustache}}](http://mustache.github.io/)
templates using modern C++.
[![Build Status](https://travis-ci.org/no1msd/mstch.svg?branch=master)](https://travis-ci.org/no1msd/mstch) [![Build Status](https://travis-ci.org/no1msd/mstch.svg?branch=master)](https://travis-ci.org/no1msd/mstch)
@ -48,11 +49,45 @@ Hi Mark!
Hi Scott! Hi Scott!
``` ```
### Data structure
The types in the example above, `mstch::array` and `mstch::map` are actually
aliases for standard types:
```c++
using map = std::map<const std::string, node>;
using array = std::vector<node>;
```
`mstch::node` is a `boost::variant` that can hold a `std::string`, `int`,
`bool`, lambda expression or a `std::shared_ptr` to a `mstch::object`
(see below), also a map or an array recursively. Essentially it works just like
a JSON object.
Note that when using a `std::string` as value you must explicitly specify the
type, since a `const char*` literal like `"foobar"` would be implicitly
converted to bool. Alternatively you can use [C++14 string_literals](http://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s)
if your compiler supports it.
## Advanced usage
### Partials
TODO
### Lambdas
TODO
### Objects
TODO
## Requirements ## Requirements
- A C++ compiler with decent C++11 support. Currently only tested with GCC 4.9. - A C++ compiler with decent C++11 support. Currently only tested with GCC 4.9.
- Boost 1.54 - Boost 1.54+ for [Boost.Variant](http://www.boost.org/doc/libs/1_57_0/doc/html/variant.html)
- CMake for building - CMake 2.8+ for building
## Installing ## Installing
@ -66,7 +101,12 @@ From the root of the source tree:
$ make install $ make install
``` ```
### Running the unit tests ## Running the unit tests
Unit tests are using the [Catch](https://github.com/philsquared/Catch) framework,
included in the repository. [Boost.Program_Options](http://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html)
and [The Boost Algorithm Library](http://www.boost.org/doc/libs/1_57_0/libs/algorithm/doc/html/index.html)
are also required to build them.
```bash ```bash
$ mkdir build $ mkdir build
@ -75,7 +115,3 @@ From the root of the source tree:
$ make $ make
$ make test $ make test
``` ```
## Advanced usage
TODO

View file

@ -64,10 +64,10 @@ class lambda {
using node = boost::make_recursive_variant< using node = boost::make_recursive_variant<
boost::blank, std::string, int, bool, lambda, boost::blank, std::string, int, bool, lambda,
std::shared_ptr<internal::object_t<boost::recursive_variant_>>, std::shared_ptr<internal::object_t<boost::recursive_variant_>>,
std::map<const std::string,boost::recursive_variant_>, std::map<const std::string, boost::recursive_variant_>,
std::vector<boost::recursive_variant_>>::type; std::vector<boost::recursive_variant_>>::type;
using object = internal::object_t<node>; using object = internal::object_t<node>;
using map = std::map<const std::string,node>; using map = std::map<const std::string, node>;
using array = std::vector<node>; using array = std::vector<node>;
std::string render( std::string render(

View file

@ -27,7 +27,7 @@ int main() {
std::vector<unsigned long> times; std::vector<unsigned long> times;
for (int j = 0; j < 10; j++) { for (int j = 0; j < 10; j++) {
unsigned long start = current_msec(); auto start = current_msec();
for (int i = 0; i < 5000; i++) for (int i = 0; i < 5000; i++)
mstch::render(comment_tmp, comment_view); mstch::render(comment_tmp, comment_view);
times.push_back(current_msec() - start); times.push_back(current_msec() - start);