more documentation
This commit is contained in:
parent
690cdf852d
commit
a478af2a27
3 changed files with 47 additions and 11 deletions
52
README.md
52
README.md
|
@ -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
|
|
|
@ -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(
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue