[/
 / Copyright (c) 2008 Eric Niebler
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[/================================]
[section:naming Naming Conventions]
[/================================]

Proto is a large library and probably quite unlike any library you've used
before. Proto uses some consistent naming conventions to make it easier to
navigate, and they're described below.

[/================]
[heading Functions]
[/================]

All of Proto's functions are defined in the `boost::proto` namespace. For
example, there is a function called `value()` defined in `boost::proto` that
accepts a terminal expression and returns the terminal's value.

[/====================]
[heading Metafunctions]
[/====================]

Proto defines /metafunctions/ that correspond to each of Proto's free functions.
The metafunctions are used to compute the functions' return types. All of
Proto's metafunctions live in the `boost::proto::result_of` namespace and
have the same name as the functions to which they correspond. For instance,
there is a class template `boost::proto::result_of::value<>` that you can
use to compute the return type of the `boost::proto::value()` function.

[/=======================]
[heading Function Objects]
[/=======================]

Proto defines /function object/ equivalents of all of its free functions. (A
function object is an instance of a class type that defines an `operator()`
member function.) All of Proto's function object types are defined in the
`boost::proto::functional` namespace and have the same name as their
corresponding free functions. For example, `boost::proto::functional::value`
is a class that defines a function object that does the same thing as the
`boost::proto::value()` free function.

[/===========================]
[heading Primitive Transforms]
[/===========================]

Proto also defines /primitive transforms/ -- class types that can be used
to compose larger transforms for manipulating expression trees. Many of
Proto's free functions have corresponding primitive transforms. These live
in the `boost::proto` namespace and their names have a leading underscore.
For instance, the transform corresponding to the `value()` function is
called `boost::proto::_value`.

The following table summarizes the discussion above:

[table Proto Naming Conventions
  [[Entity]           [Example]                            ]
  [[Free Function]    [`boost::proto::value()`]            ]
  [[Metafunction]     [`boost::proto::result_of::value<>`] ]
  [[Function Object]  [`boost::proto::functional::value`]  ]
  [[Transform]        [`boost::proto::_value`]             ]
]

[endsect]

