Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 626e7b9df2c26f4a1ac4abc5819592a1 > files > 400

atlascpp-devel-0.6.2-1.fc15.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Atlas-C++: objectFactory.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Atlas-C++</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">objectFactory.h</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// This file may be redistributed and modified only under the terms of</span>
<a name="l00002"></a>00002 <span class="comment">// the GNU Lesser General Public License (See COPYING for details).</span>
<a name="l00003"></a>00003 <span class="comment">// Copyright (C) 2000 Aloril</span>
<a name="l00004"></a>00004 <span class="comment">// Copyright (C) 2005 Al Riddoch</span>
<a name="l00005"></a>00005 
<a name="l00006"></a>00006 <span class="comment">// $Id$</span>
<a name="l00007"></a>00007 
<a name="l00008"></a>00008 <span class="preprocessor">#ifndef ATLAS_OBJECTS_OBJECTFACTORY_H</span>
<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define ATLAS_OBJECTS_OBJECTFACTORY_H</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span>
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;Atlas/Objects/Root.h&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include &lt;Atlas/Objects/SmartPtr.h&gt;</span>
<a name="l00013"></a>00013 
<a name="l00014"></a>00014 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include &lt;list&gt;</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;map&gt;</span>
<a name="l00017"></a>00017 
<a name="l00018"></a>00018 <span class="keyword">namespace </span>Atlas { <span class="keyword">namespace </span>Objects {
<a name="l00019"></a>00019 
<a name="l00020"></a><a class="code" href="class_atlas_1_1_objects_1_1_no_such_factory_exception.html">00020</a> <span class="keyword">class </span><a class="code" href="class_atlas_1_1_objects_1_1_no_such_factory_exception.html">NoSuchFactoryException</a> : <span class="keyword">public</span> Atlas::<a class="code" href="class_atlas_1_1_exception.html" title="Base class for all exceptions thrown by Atlas-C++.">Exception</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022   <span class="keyword">protected</span>:
<a name="l00023"></a>00023     std::string name;
<a name="l00024"></a>00024   <span class="keyword">public</span>:
<a name="l00025"></a>00025     <a class="code" href="class_atlas_1_1_objects_1_1_no_such_factory_exception.html">NoSuchFactoryException</a>(<span class="keyword">const</span> std::string&amp; name) :
<a name="l00026"></a>00026                <a class="code" href="class_atlas_1_1_exception.html" title="Base class for all exceptions thrown by Atlas-C++.">Atlas::Exception</a>(<span class="stringliteral">&quot;No factory for Objects type&quot;</span>), name(name) { }
<a name="l00027"></a>00027     <span class="keyword">virtual</span> ~<a class="code" href="class_atlas_1_1_objects_1_1_no_such_factory_exception.html">NoSuchFactoryException</a>() <span class="keywordflow">throw</span> ();
<a name="l00028"></a>00028     <span class="keyword">const</span> std::string &amp; getName() {
<a name="l00029"></a>00029         <span class="keywordflow">return</span> name;
<a name="l00030"></a>00030     }
<a name="l00031"></a>00031 };
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00034"></a>00034 <span class="keyword">static</span> <a class="code" href="class_atlas_1_1_objects_1_1_smart_ptr.html">SmartPtr&lt;RootData&gt;</a> factory(<span class="keyword">const</span> std::string &amp;, <span class="keywordtype">int</span>)
<a name="l00035"></a>00035 {
<a name="l00036"></a>00036     <a class="code" href="class_atlas_1_1_objects_1_1_smart_ptr.html">SmartPtr&lt;T&gt;</a> obj;
<a name="l00037"></a>00037     <span class="keywordflow">return</span> obj;
<a name="l00038"></a>00038 }
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 SmartPtr&lt;RootData&gt; generic_factory(<span class="keyword">const</span> std::string &amp; name, <span class="keywordtype">int</span> no);
<a name="l00041"></a>00041 SmartPtr&lt;RootData&gt; anonymous_factory(<span class="keyword">const</span> std::string &amp; name, <span class="keywordtype">int</span> no);
<a name="l00042"></a>00042 
<a name="l00043"></a>00043 <span class="keyword">typedef</span> Root (*FactoryMethod)(<span class="keyword">const</span> std::string &amp;, int);
<a name="l00044"></a>00044 <span class="keyword">typedef</span> std::map&lt;const std::string, std::pair&lt;FactoryMethod, int&gt; &gt; FactoryMap;
<a name="l00045"></a>00045 
<a name="l00046"></a><a class="code" href="class_atlas_1_1_objects_1_1_factories.html">00046</a> <span class="keyword">class </span><a class="code" href="class_atlas_1_1_objects_1_1_factories.html">Factories</a> 
<a name="l00047"></a>00047 {
<a name="l00048"></a>00048 <span class="keyword">public</span>:
<a name="l00049"></a>00049     <span class="keyword">friend</span> <span class="keyword">class </span>AddFactories;
<a name="l00050"></a>00050 
<a name="l00051"></a>00051     <a class="code" href="class_atlas_1_1_objects_1_1_factories.html">Factories</a>();
<a name="l00052"></a>00052     <span class="keyword">explicit</span> <a class="code" href="class_atlas_1_1_objects_1_1_factories.html">Factories</a>(<span class="keyword">const</span> <a class="code" href="class_atlas_1_1_objects_1_1_factories.html">Factories</a> &amp;);
<a name="l00053"></a>00053 
<a name="l00054"></a>00054     <span class="keywordtype">bool</span> hasFactory(<span class="keyword">const</span> std::string&amp; name);
<a name="l00055"></a>00055     <a class="code" href="class_atlas_1_1_objects_1_1_smart_ptr.html">Root</a> createObject(<span class="keyword">const</span> std::string&amp; name);
<a name="l00056"></a>00056     <a class="code" href="class_atlas_1_1_objects_1_1_smart_ptr.html">Root</a> createObject(<span class="keyword">const</span> Atlas::Message::MapType &amp; msg);
<a name="l00057"></a>00057     std::list&lt;std::string&gt; getKeys();
<a name="l00058"></a>00058     <span class="keywordtype">int</span> addFactory(<span class="keyword">const</span> std::string&amp; name, FactoryMethod method);
<a name="l00059"></a>00059 
<a name="l00060"></a>00060     <span class="keyword">static</span> <a class="code" href="class_atlas_1_1_objects_1_1_factories.html">Factories</a> * instance();
<a name="l00061"></a>00061 <span class="keyword">private</span>:
<a name="l00062"></a>00062     FactoryMap m_factories;
<a name="l00063"></a>00063     <span class="keyword">static</span> <a class="code" href="class_atlas_1_1_objects_1_1_factories.html">Factories</a> * m_instance;
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     <span class="keywordtype">void</span> addFactory(<span class="keyword">const</span> std::string&amp; name, FactoryMethod method, <span class="keywordtype">int</span> classno);
<a name="l00066"></a>00066 };
<a name="l00067"></a>00067     
<a name="l00068"></a>00068 <span class="keyword">extern</span> std::map&lt;const std::string, Root&gt; objectDefinitions;
<a name="l00069"></a>00069 
<a name="l00070"></a>00070 } } <span class="comment">// namespace Atlas::Objects</span>
<a name="l00071"></a>00071 
<a name="l00072"></a>00072 <span class="preprocessor">#endif // ATLAS_OBJECTS_OBJECTFACTORY_H</span>
</pre></div></div>
</div>
<HR>
<P>Copyright 2000-2004 the respective authors.</P>
<P>This document can be licensed under the terms of the GNU Free Documentation
License or the GNU General Public License and may be freely distributed under
the terms given by one of these licenses.</P>