<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to GettingStarted</title><link>https://sourceforge.net/p/wallaroolib/wiki/GettingStarted/</link><description>Recent changes to GettingStarted</description><atom:link href="https://sourceforge.net/p/wallaroolib/wiki/GettingStarted/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 01 Apr 2015 14:57:36 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/wallaroolib/wiki/GettingStarted/feed" rel="self" type="application/rss+xml"/><item><title>GettingStarted modified by Anonymous</title><link>https://sourceforge.net/p/wallaroolib/wiki/GettingStarted/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;How to start using Wallaroo in your projects.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id="getting-started"&gt;Getting Started&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Getting Started&lt;ul&gt;
&lt;li&gt;Getting Wallaroo&lt;/li&gt;
&lt;li&gt;Compiling Wallaroo&lt;/li&gt;
&lt;li&gt;External Dependencies&lt;/li&gt;
&lt;li&gt;How to build the examples&lt;/li&gt;
&lt;li&gt;Make&lt;/li&gt;
&lt;li&gt;Visual Studio&lt;/li&gt;
&lt;li&gt;How to build your own project&lt;/li&gt;
&lt;li&gt;Using Wallaroo&lt;/li&gt;
&lt;li&gt;Parts and Collaborators&lt;/li&gt;
&lt;li&gt;Basics&lt;/li&gt;
&lt;li&gt;Loading the configuration from a file&lt;/li&gt;
&lt;li&gt;Defining wallaroo classes in shared libraries&lt;/li&gt;
&lt;li&gt;Where to go from here&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-wallaroo"&gt;Getting Wallaroo&lt;/h2&gt;
&lt;p&gt;The easiest way to get a copy of Wallaroo is to download an archive from the page &lt;a class="" href="http://sourceforge.net/projects/wallaroolib/files"&gt;Downloads of the sourceforge page&lt;/a&gt;. Wallaroo is delivered in a ZIP file for Windows users and in a compressed TAR file (.tgz) for Unix/Linux users. Both archives contain the same files, the only difference is that all text files in the ZIP files have line endings suitable for Windows (CR-LF), while the text files in the TAR file have line endings suitable for Unix/Linux (LF only). &lt;/p&gt;
&lt;p&gt;Otherways, you can clone the git repository from the page &lt;a class="" href="http://code.google.com/p/wallaroo/source/checkout" rel="nofollow"&gt;Source&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;You can also browse the source tree &lt;a class="" href="http://code.google.com/p/wallaroo/source/browse" rel="nofollow"&gt;online&lt;/a&gt;. &lt;/p&gt;
&lt;h2 id="compiling-wallaroo"&gt;Compiling Wallaroo&lt;/h2&gt;
&lt;p&gt;Wallaroo library is header-only: it consists entirely of header files containing templates and inline functions, and require no separately-compiled library binaries or special treatment when linking. &lt;/p&gt;
&lt;h2 id="external-dependencies"&gt;External Dependencies&lt;/h2&gt;
&lt;p&gt;Wallaroo relies on some of the famous &lt;strong&gt;boost&lt;/strong&gt; libraries. You can donwload the latest version from &lt;a class="" href="http://www.boost.org" rel="nofollow"&gt;here&lt;/a&gt;, extract it wherever you want in your hard disk and include its path when compiling your application that use Wallaroo. &lt;/p&gt;
&lt;p&gt;Since Wallaroo uses header only boost libraries, you don't need to compile boost. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Starting from v. 0.2, if your compiler supports C++0x features, you can get rid of boost libraries and relies only on the new C++ standard features.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="how-to-build-the-examples"&gt;How to build the examples&lt;/h2&gt;
&lt;p&gt;You can find some examples in the directory &lt;em&gt;samples&lt;/em&gt;. Each example comes with: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GNU makefile &lt;/li&gt;
&lt;li&gt;Windows nmake makefile &lt;/li&gt;
&lt;li&gt;visual studio 2008 solution file &lt;/li&gt;
&lt;li&gt;visual studio 2013 solution file &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All methods require you to specify the boost library path. You can do it in the following ways. &lt;/p&gt;
&lt;h3 id="make"&gt;Make&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="n"&gt;UCFLAGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="na"&gt;-I&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;boost_path&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;example: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;make&lt;/span&gt; &lt;span class="n"&gt;UCFLAGS&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;boost_1_50_0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="visual-studio"&gt;Visual Studio&lt;/h3&gt;
&lt;p&gt;You must set the environment variable &lt;code&gt;BOOST&lt;/code&gt;. &lt;/p&gt;
&lt;h2 id="how-to-build-your-own-project"&gt;How to build your own project&lt;/h2&gt;
&lt;p&gt;To build your own project, the compiler needs to know the include path of the wallaroo libraries. &lt;/p&gt;
&lt;p&gt;If your compiler is not C++0x compliant (or if you plan to use XmlConfiguration or JsonConfiguration classes), you should also provide the boost path. &lt;/p&gt;
&lt;p&gt;Fore example, if you use gcc, you can use the following syntax (with boost): &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="na"&gt;-Wall&lt;/span&gt; &lt;span class="na"&gt;-I&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;boost_path&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="na"&gt;-I&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;wallaroo_path&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="bp"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cpp&lt;/span&gt; &lt;span class="na"&gt;-o&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;app_exe&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or (without boost): &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="na"&gt;-Wall&lt;/span&gt; &lt;span class="na"&gt;-std&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="na"&gt;-I&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;wallaroo_path&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="bp"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cpp&lt;/span&gt; &lt;span class="na"&gt;-o&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;app_exe&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="using-wallaroo"&gt;Using Wallaroo&lt;/h2&gt;
&lt;p&gt;Using Wallaroo you will be able to separate the setup phase (object building and wiring) from the logic of your classes. In addition, you will be able to change the class of your objects without rebuilding anything: in this way you can change the behaviour of your application, or perform mock testing using the same executable. &lt;/p&gt;
&lt;p&gt;With Wallaroo you will be able to focus on the logic of your classes, without worrying about the wiring phase. &lt;/p&gt;
&lt;p&gt;This mechanism is called &lt;strong&gt;Dependency Injection&lt;/strong&gt;. Someone calls it &lt;strong&gt;Inversion of Control&lt;/strong&gt;, but actually that has a broader meaning (see &lt;a class="" href="http://martinfowler.com/articles/injection.html" rel="nofollow"&gt;here&lt;/a&gt;). &lt;/p&gt;
&lt;h3 id="parts-and-collaborators"&gt;Parts and Collaborators&lt;/h3&gt;
&lt;p&gt;The syntax of Wallaroo is based on the catalog metaphor. The objects you build and link together are "parts", that use "collaborators". You can add a dependency from a part to another by linking a collaborator of the first to the second. &lt;/p&gt;
&lt;h3 id="basics"&gt;Basics&lt;/h3&gt;
&lt;p&gt;To be instantiable by &lt;strong&gt;wallaroo&lt;/strong&gt;, a class must derive from &lt;code&gt;wallaroo::Part&lt;/code&gt;. So, to make a class &lt;code&gt;Car&lt;/code&gt; instantiable by &lt;strong&gt;wallaroo&lt;/strong&gt;, you must declare it in an header file in this way: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include "wallaroo/registered.h"&lt;/span&gt;

&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;wallaroo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Part&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// other methods declaration here&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and you must define it in the implementation file in this way: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;WALLAROO_REGISTER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// other methods definition here&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The parameter &lt;code&gt;string&lt;/code&gt; you can see inside the clause &lt;code&gt;WALLAROO_REGISTER&lt;/code&gt; is the parameter type of the &lt;code&gt;Car&lt;/code&gt; constructor. Wallaroo can manage constructors having up to 2 parameters (see wallaroo::Attribute for a way to overcome this limit). &lt;/p&gt;
&lt;p&gt;The previous declaration and definition, allow you to create instances of &lt;code&gt;Car&lt;/code&gt; in this way: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include "wallaroo/catalog.h"&lt;/span&gt;

&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;wallaroo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Catalog&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// this is the container of your objects&lt;/span&gt;

&lt;span class="c1"&gt;// populate the catalog with some objects:&lt;/span&gt;
&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"ferrari_f430"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Car"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"red"&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"maserati_granturismo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Car"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"black"&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The methods used have the following signature: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;P1&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;P2&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;Catalog&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;className&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;P1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;P2&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;p2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;Catalog&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;className&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;Catalog&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;className&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The first parameter is the name of the instance you're going to create, the second is the name of its class and the (optional) others parameters are the parameters you want to pass to the constructor of the object. &lt;/p&gt;
&lt;p&gt;After filling the catalog, you can get a pointer to an object in this way: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;shared_ptr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;maserati&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"maserati_granturismo"&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see, the catalog returns a shared pointer. &lt;/p&gt;
&lt;p&gt;So far so good. Now, to do useful work, your objects need to talk to each other. For example, class &lt;code&gt;Car&lt;/code&gt; may need to invoke &lt;code&gt;Engine&lt;/code&gt; methods. &lt;/p&gt;
&lt;p&gt;With this code you say that class &lt;code&gt;Car&lt;/code&gt; has a "pointer" to reach an object of class &lt;code&gt;Engine&lt;/code&gt;: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Part&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nl"&gt;private:&lt;/span&gt;
    &lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Engine&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Please note that by deriving &lt;code&gt;Car&lt;/code&gt; from &lt;code&gt;Part&lt;/code&gt; you make it possible associate a specific instance of class &lt;code&gt;Engine&lt;/code&gt; to the member &lt;code&gt;engine&lt;/code&gt; at run-time. &lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;Car&lt;/code&gt; constructor, you must specify that &lt;code&gt;Car&lt;/code&gt; has an &lt;code&gt;engine&lt;/code&gt; &lt;code&gt;Collaborator&lt;/code&gt; named &lt;code&gt;mainEngine&lt;/code&gt;: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"mainEngine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RegistrationToken&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Inside the &lt;code&gt;Car&lt;/code&gt; implementation you can use it as a standard pointer: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SwitchOn&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Just remember that &lt;code&gt;Collaborator&amp;lt; Engine &amp;gt;&lt;/code&gt; is really a &lt;code&gt;weak_ptr&lt;/code&gt;: if in the meantime someone deleted the pointed object, when you try to use it you will get a &lt;code&gt;Wallaroo::DeletedPartError&lt;/code&gt; exception. &lt;/p&gt;
&lt;p&gt;Please note that you can have a collaborator container in your classes, by using the syntax: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;by default, in this case wallaroo will use std::vector. However, you can specify another std container in this way: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Book&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also provide constraints about a collaborator, i.e. you can specify if a collaborator is optional, mandatory (default) or its range (for a collection collaborator): &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Part&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nl"&gt;private:&lt;/span&gt;
    &lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Engine&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// one instance of Engine&lt;/span&gt;
    &lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;AirConditioning&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;optional&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;airConditioning&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// zero or one instance of airConditioning&lt;/span&gt;
    &lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Airbag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;airbags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// an indeterminate number of airbags (std::vector by default)&lt;/span&gt;
    &lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Speaker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;speakers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// an indeterminate number of speaker in a std::list&lt;/span&gt;
    &lt;span class="n"&gt;Collaborator&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Seat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bounded_collection&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;seats&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// from 2 to 6 instances of seats&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So far so good. But how can you link &lt;code&gt;engine&lt;/code&gt; to a previously created object? With this code: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"f136e"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"mainEngine"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"ferrari_f430"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// this means ferrari_f430.engine=f136e&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In this way you assigned the object &lt;code&gt;f136e&lt;/code&gt; to the role &lt;code&gt;engine&lt;/code&gt; of the object &lt;code&gt;ferrari_f430&lt;/code&gt;. This wiring operation can be done in the main, where you set up all your application, or wherever you like in your code, providing you have access to &lt;code&gt;catalog&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;If your application uses a unique catalog, wallaroo provides the following syntax to avoid you some typing: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Catalog&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;wallaroo_within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"f136e"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"engine"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"ferrari_f430"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"m139p"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"engine"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"maserati_granturismo"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;this is equivalent to: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Catalog&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"f136e"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"engine"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"ferrari_f430"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"m139p"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;as&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"engine"&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myCatalog&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="s"&gt;"maserati_granturismo"&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;the latter code is useful when your objects are stored in multiple catalogs. &lt;/p&gt;
&lt;p&gt;After performing the wiring, you can check the constraints by using &lt;code&gt;Catalog::IsWiringOk()&lt;/code&gt; (that returns a bool) or &lt;code&gt;Catalog::CheckWiring()&lt;/code&gt; (that throws an exception). &lt;/p&gt;
&lt;h3 id="loading-the-configuration-from-a-file"&gt;Loading the configuration from a file&lt;/h3&gt;
&lt;p&gt;By using strings, both creation and wiring information can be loaded from a configuration file or external DB. &lt;/p&gt;
&lt;p&gt;You can build your own mechanism to load a spec from a file and fill a &lt;code&gt;wallaroo::Catalog&lt;/code&gt; with the objects built and configured or you can use the &lt;code&gt;wallaroo::XmlConfiguration&lt;/code&gt; or &lt;code&gt;wallaroo::JsonConfiguration&lt;/code&gt; classes, that let you fill a catalog loading respectively an xml or json file (the syntax is explained &lt;a class="" href="/p/wallaroolib/wiki/WiringFiles"&gt;here&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;This is the content of the xml file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;wallaroo&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;parts&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;part&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;ferrari_f430&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;class&amp;gt;&lt;/span&gt;Car&lt;span class="nt"&gt;&amp;lt;/class&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;parameter1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;string&lt;span class="nt"&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;red&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/parameter1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/part&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;part&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;maserati_granturismo&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;class&amp;gt;&lt;/span&gt;Car&lt;span class="nt"&gt;&amp;lt;/class&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;parameter1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;string&lt;span class="nt"&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;black&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/parameter1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/part&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;part&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;m139p&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;class&amp;gt;&lt;/span&gt;Engine&lt;span class="nt"&gt;&amp;lt;/class&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/part&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;part&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;f136e&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;class&amp;gt;&lt;/span&gt;Engine&lt;span class="nt"&gt;&amp;lt;/class&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/part&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;/parts&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;wiring&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;wire&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;source&amp;gt;&lt;/span&gt;ferrari_f430&lt;span class="nt"&gt;&amp;lt;/source&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;dest&amp;gt;&lt;/span&gt;f136e&lt;span class="nt"&gt;&amp;lt;/dest&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;collaborator&amp;gt;&lt;/span&gt;mainEngine&lt;span class="nt"&gt;&amp;lt;/collaborator&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/wire&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;wire&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;source&amp;gt;&lt;/span&gt;maserati_granturismo&lt;span class="nt"&gt;&amp;lt;/source&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;dest&amp;gt;&lt;/span&gt;m139p&lt;span class="nt"&gt;&amp;lt;/dest&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;collaborator&amp;gt;&lt;/span&gt;mainEngine&lt;span class="nt"&gt;&amp;lt;/collaborator&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/wire&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;/wiring&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/wallaroo&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is the content of the json file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"wallaroo"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="err"&gt;{&lt;/span&gt;

    &lt;span class="s2"&gt;"parts"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="cp"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"ferrari_f430"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Car"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"parameter1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"red"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"maserati_granturismo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Car"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"parameter1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="s2"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="s2"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"black"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"m139p"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Engine"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"f136e"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Engine"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;

    &lt;span class="s2"&gt;"wiring"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="cp"&gt;[&lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"ferrari_f430"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"dest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"f136e"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"collaborator"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"mainEngine"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"maserati_granturismo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"dest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"m139p"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"collaborator"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"mainEngine"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cp"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;So, instead of populating manually the catalog, you can do it by loading a xml file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Catalog&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;XmlConfiguration&lt;/span&gt; &lt;span class="nf"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"wiring.xml"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or, a json file: &lt;/p&gt;
&lt;p&gt;So, instead of populating manually the catalog, you can do it by loading a xml file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Catalog&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;JsonConfiguration&lt;/span&gt; &lt;span class="nf"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"wiring.json"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="defining-wallaroo-classes-in-shared-libraries"&gt;Defining wallaroo classes in shared libraries&lt;/h3&gt;
&lt;p&gt;For shake of extendibility you can decide to put your class definitions in shared libraries to get simple plugin mechanism. &lt;/p&gt;
&lt;p&gt;The code of your class will remain the same, but you must compile it in a shared library (.dll on windows or .so on unix-like os). You can put declaration and definition in a implementation file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include "wallaroo/dynamic_lib.h" &lt;/span&gt;&lt;span class="c1"&gt;// once per library&lt;/span&gt;
&lt;span class="cp"&gt;#include "wallaroo/dyn_registered.h" &lt;/span&gt;&lt;span class="c1"&gt;// once per translation unit&lt;/span&gt;

&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;wallaroo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Part&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;public:&lt;/span&gt;
    &lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// other methods declaration here&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="n"&gt;WALLAROO_DYNLIB_REGISTER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Car&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// other methods definition here&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Please note that in this case you use &lt;code&gt;WALLAROO_DYNLIB_REGISTER&lt;/code&gt; instead of &lt;code&gt;WALLAROO_REGISTER&lt;/code&gt;. You must include "dynamic_lib.h" only once per library and "dyn_registered.h" in every translation unit where you use &lt;code&gt;WALLAROO_DYNLIB_REGISTER&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;The current version of wallaroo only support the definition of classes with zero-parameters constructor in shared libraries. &lt;/p&gt;
&lt;p&gt;To load the classes definition, you must use the static method &lt;code&gt;Plugin::Load()&lt;/code&gt; at the beginning of your application: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include "wallaroo/catalog.h"&lt;/span&gt;

&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;wallaroo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;// load classes in shared libraries:&lt;/span&gt;
&lt;span class="n"&gt;Plugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"car"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Plugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Suffix&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Plugin::Suffix() expands to .dll or .so according to the OS&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Catalog&lt;/span&gt; &lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// this is the container of your objects&lt;/span&gt;

&lt;span class="c1"&gt;// populate the catalog with some objects:&lt;/span&gt;
&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"ferrari_f430"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Car"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"maserati_granturismo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Car"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, you can specify the shared libraries to load in the configuration file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;wallaroo&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;shared&amp;gt;&lt;/span&gt;car&lt;span class="nt"&gt;&amp;lt;/shared&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;shared&amp;gt;&lt;/span&gt;engine&lt;span class="nt"&gt;&amp;lt;/shared&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;parts&amp;gt;&lt;/span&gt;
    ...
  &lt;span class="nt"&gt;&amp;lt;/parts&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;wiring&amp;gt;&lt;/span&gt;
    ...
  &lt;span class="nt"&gt;&amp;lt;/wiring&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/wallaroo&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;or &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"wallaroo"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="err"&gt;{&lt;/span&gt;

    &lt;span class="s2"&gt;"plugins"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="err"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"shared"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"car"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"shared"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"engine"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;

    &lt;span class="s2"&gt;"parts"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="cp"&gt;[&lt;/span&gt;
      &lt;span class="nx"&gt;...&lt;/span&gt;
    &lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;

    &lt;span class="s2"&gt;"wiring"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="cp"&gt;[&lt;/span&gt;
      &lt;span class="nx"&gt;...&lt;/span&gt;
    &lt;span class="cp"&gt;]&lt;/span&gt;
  &lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;then, in the main application, you must specify to load the shared libraries specified in the configuration file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include "wallaroo/catalog.h"&lt;/span&gt;
&lt;span class="cp"&gt;#include "wallaroo/xmlconfiguration.h"&lt;/span&gt;

&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;wallaroo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;XmlConfiguration&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"configuration.xml"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// load classes in shared libraries:&lt;/span&gt;
&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LoadPlugins&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="where-to-go-from-here"&gt;Where to go from here&lt;/h2&gt;
&lt;p&gt;This page has given you a general overview of &lt;strong&gt;Wallaroo&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;You can obtain more information in the following places: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="" href="/p/wallaroolib/wiki/Tutorial"&gt;Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="http://doc.wallaroo.googlecode.com/git/index.html" rel="nofollow"&gt;API documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="/p/wallaroolib/wiki/FAQ"&gt;FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="/p/wallaroolib/wiki/WiringFiles"&gt;Wiring file description&lt;/a&gt; and &lt;a class="" href="/p/wallaroolib/wiki/XmlSchema"&gt;wallaroo XML file schema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The samples contained in the library &lt;/li&gt;
&lt;li&gt;and, in general, you can refer to the &lt;a class="" href="https://code.google.com/p/wallaroo/wiki/TableOfContents" rel="nofollow"&gt;documentation index page&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Wed, 01 Apr 2015 14:57:36 -0000</pubDate><guid>https://sourceforge.netc22f7f4163061ff76b08fa5b97c8c5e00bf5d695</guid></item></channel></rss>