Merge branch 'builder'

This commit is contained in:
Fischlurch 2008-04-12 02:12:41 +02:00
commit f7bfe50bc9
151 changed files with 6909 additions and 388 deletions

View file

@ -251,7 +251,7 @@ def defineBuildTargets(env, artifacts):
artifacts['plugins'] = env.SharedLibrary('$BINDIR/lumiera-plugin', plugobj)
# call subdir SConscript(s) for independent components
SConscript(dirs=[SRCDIR+'/tool'], exports='env artifacts')
SConscript(dirs=[SRCDIR+'/tool'], exports='env artifacts core')
SConscript(dirs=[TESTDIR], exports='env artifacts core')
@ -264,7 +264,7 @@ def definePostBuildTargets(env, artifacts):
il = env.Alias('install-lib', '$DESTDIR/lib')
env.Alias('install', [ib, il])
build = env.Alias('build', artifacts['lumiera']+artifacts['plugins'])
build = env.Alias('build', artifacts['lumiera']+artifacts['plugins']+artifacts['tools'])
allbu = env.Alias('allbuild', build+artifacts['testsuite'])
env.Default('build')
# additional files to be cleaned when cleaning 'build'

2
doc/devel/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
,doxylog
html/*

View file

@ -21,7 +21,8 @@
<a name="refoperation133509"></a>
<table><tr><td><div class="element">Operation <b>currEDL</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + currEDL() : <a href="class128133.html#refclass128133"><b>EDL</b></a></li><li>C++ : public: <a href="class128133.html#refclass128133"><b>EDL</b></a> currEDL () </li></ul><p>The EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands.<br /></p><a name="refoperation133637"></a>
<table><tr><td><div class="element">Operation <b>getFixture</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + getFixture() : Fixture&amp;</li><li>C++ : public: Fixture&amp; getFixture () </li></ul><p>While the session can be comprised of several EDLs, <br />there is only one Fixture, which represents the actual<br />configuration of all Objects to be rendered<br /></p><a name="refrelation144773"></a>
<table><tr><td><div class="element">Relation <b>current (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : static, + current : <a href="class139781.html#refclass139781"><b>SessManager</b></a>, multiplicity : 1</li><li>C++ : public: static <a href="class139781.html#refclass139781"><b>SessManager</b></a>&amp; current</li></ul><p>Standard access path to get at the current session via the Session Manager, which acts as a "PImpl" smart pointer<br /></p></div>
<table><tr><td><div class="element">Relation <b>current (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : static, + current : <a href="class139781.html#refclass139781"><b>SessManager</b></a>, multiplicity : 1</li><li>C++ : public: static <a href="class139781.html#refclass139781"><b>SessManager</b></a>&amp; current</li></ul><p>Standard access path to get at the current session via the Session Manager, which acts as a "PImpl" smart pointer<br /></p><a name="refrelation150917"></a>
<table><tr><td><div class="element">Relation <b>defaults (&lt;unidirectional association&gt;)</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # defaults : <a href="class141445.html#refclass141445"><b>DefaultsManager</b></a></li><li>C++ : protected: <a href="class141445.html#refclass141445"><b>DefaultsManager</b></a>* defaults</li></ul></div>
<p>All public operations : <a href="class139653.html#refoperation133509"><b>currEDL</b></a> , <a href="class139653.html#refoperation133637"><b>getFixture</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,26 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class ConfigRules</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class ConfigRules</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass140549"></a>
<p>Declaration :</p><ul><li>C++ : class ConfigRules : public <a href="class140677.html#refclass140677"><b>QueryHandler</b></a>&lt;&gt; </li><li>Java : public interface ConfigRules </li></ul><p>Directly inherited by : <a href="class140933.html#refclass140933"><b>ResolverBase</b></a> </p>
<p>public acces point for running Config Queries<br /></p><div class="sub">
<a name="refrelation148485"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class140677.html#refclass140677"><b>QueryHandler</b></a></li><li>C++ : protected: <a href="class140677.html#refclass140677"><b>QueryHandler</b></a>* </li></ul><a name="refrelation148741"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class140677.html#refclass140677"><b>QueryHandler</b></a></li><li>C++ : protected: <a href="class140677.html#refclass140677"><b>QueryHandler</b></a>* </li></ul></div>
<p>All public operations : <a href="class140677.html#refoperation135301"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,27 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class QueryHandler</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class QueryHandler</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass140677"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;class TY&gt; class QueryHandler </li><li>Java : public interface QueryHandler&lt;TY&gt; </li></ul><p>Directly inherited by : <a href="class140549.html#refclass140549"><b>ConfigRules</b></a> </p>
<div class="sub">
<a name="refrelation148613"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class140549.html#refclass140549"><b>ConfigRules</b></a></li><li>C++ : protected: <a href="class140549.html#refclass140549"><b>ConfigRules</b></a>* </li></ul><a name="refrelation148869"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class140549.html#refclass140549"><b>ConfigRules</b></a></li><li>C++ : protected: <a href="class140549.html#refclass140549"><b>ConfigRules</b></a>* </li></ul><a name="refoperation135301"></a>
<table><tr><td><div class="element">Operation <b>resolve</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + resolve(inout solution : P&lt;TY&gt;, in query : Query&lt;TY&gt;) : bool</li><li>C++ : public: bool resolve () </li></ul></div>
<p>All public operations : <a href="class140677.html#refoperation135301"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,26 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class TypeHandler</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class TypeHandler</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass140805"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;class TY&gt; class TypeHandler </li><li>Java : public interface TypeHandler&lt;TY&gt; </li></ul><p>Directly inherited by : <a href="class141317.html#refclass141317"><b>TypeHandler&lt;Pipe&gt;</b></a> </p>
<div class="sub">
<a name="refoperation135045"></a>
<table><tr><td><div class="element">Operation <b>find</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : abstract, + find(in capabilities : Pred) : TY</li><li>C++ : public: virtual TY find () = 0 </li></ul><a name="refoperation135173"></a>
<table><tr><td><div class="element">Operation <b>make</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : abstract, + make(in capabilities : Pred) : TY</li><li>C++ : public: virtual TY make () = 0 </li></ul></div>
<p>All public operations : <a href="class140805.html#refoperation135045"><b>find</b></a> , <a href="class140805.html#refoperation135173"><b>make</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class ResolverBase</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class ResolverBase</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass140933"></a>
<p>Declaration :</p><ul><li>C++ : class ResolverBase : public <a href="class140549.html#refclass140549"><b>ConfigRules</b></a> </li></ul><p>Directly inherited by : <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a> </p>
<div class="sub">
</div>
<p>All public operations : <a href="class140677.html#refoperation135301"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,22 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class YAP_Prolog</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class YAP_Prolog</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141061"></a>
<p>Declaration :</p><ul><li>C++ : class YAP_Prolog </li></ul><div class="sub">
</div>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class QueryHandlerImpl</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class QueryHandlerImpl</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141189"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;class TY&gt; class QueryHandlerImpl : public <a href="class140933.html#refclass140933"><b>ResolverBase</b></a> </li></ul><div class="sub">
<a name="refrelation149253"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a></li><li>C++ : protected: <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a>* </li></ul><a name="refrelation149381"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a></li><li>C++ : protected: <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a>* </li></ul><a name="refrelation149509"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a></li><li>C++ : protected: <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a>* </li></ul><a name="refrelation149637"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a></li><li>C++ : protected: <a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a>* </li></ul><a name="refoperation135429"></a>
<table><tr><td><div class="element">Operation <b>resolve</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : + resolve(inout solution : P&lt;TY&gt;, in query : Query&lt;TY&gt;) : bool</li><li>C++ : public: bool resolve () </li></ul><a name="refrelation149765"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a></li><li>C++ : protected: <a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a>* </li></ul><a name="refrelation150149"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a></li><li>C++ : protected: <a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a>* </li></ul><a name="refrelation150277"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a></li><li>C++ : protected: <a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a>* </li></ul></div>
<p>All public operations : <a href="class140677.html#refoperation135301"><b>resolve</b></a> , <a href="class141189.html#refoperation135429"><b>resolve</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class TypeHandler<Pipe></title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class TypeHandler&lt;Pipe&gt;</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141317"></a>
<p>Declaration :</p><ul><li>C++ : template&lt;&gt; class TypeHandler&lt;Pipe&gt; : public <a href="class140805.html#refclass140805"><b>TypeHandler</b></a>&lt;&gt; </li></ul><div class="sub">
<a name="refrelation149893"></a>
<table><tr><td><div class="element">Relation <b>&lt;unidirectional association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class138117.html#refclass138117"><b>Pipe</b></a></li><li>C++ : protected: <a href="class138117.html#refclass138117"><b>Pipe</b></a>* </li></ul></div>
<p>All public operations : <a href="class140805.html#refoperation135045"><b>find</b></a> , <a href="class140805.html#refoperation135173"><b>make</b></a> </p>
</body>
</html>

View file

@ -0,0 +1,23 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class DefaultsManager</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class DefaultsManager</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141445"></a>
<p>Declaration :</p><ul><li>C++ : class DefaultsManager </li></ul><div class="sub">
<a name="refrelation150661"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141573.html#refclass141573"><b>DefaultsRegistry</b></a></li><li>C++ : protected: <a href="class141573.html#refclass141573"><b>DefaultsRegistry</b></a>* </li></ul></div>
</body>
</html>

View file

@ -0,0 +1,23 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class DefaultsRegistry</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class DefaultsRegistry</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141573"></a>
<p>Declaration :</p><ul><li>C++ : class DefaultsRegistry </li></ul><div class="sub">
<a name="refrelation150789"></a>
<table><tr><td><div class="element">Relation <b>&lt;association&gt;</b></div></td></tr></table><p>Declaration :</p><ul><li>Uml : # : <a href="class141445.html#refclass141445"><b>DefaultsManager</b></a></li><li>C++ : protected: <a href="class141445.html#refclass141445"><b>DefaultsManager</b></a>* </li></ul></div>
</body>
</html>

View file

@ -0,0 +1,20 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class User</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class User</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141701"></a>
<p>Declaration :</p><ul><li>C++ : class User </li></ul></body>
</html>

View file

@ -0,0 +1,20 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Class Serializer</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Class Serializer</div>
<p></p>
<!-- ============================================================= -->
<a name="refclass141829"></a>
<p>Declaration :</p><ul><li>C++ : class Serializer </li></ul></body>
</html>

View file

@ -27,6 +27,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram130437" target = "projectFrame"><b>Media-Asset Relations</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131077" target = "projectFrame"><b>Proc-Asset Relations</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128389" target = "projectFrame"><b>Render Entities</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131461" target = "projectFrame"><b>Rules access</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128133" target = "projectFrame"><b>Session structure</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131205" target = "projectFrame"><b>Struct-Asset Relations</b></a></td><td></td><td></td></tr>
</table>

View file

@ -39,11 +39,14 @@
<tr bgcolor=#f0f0f0><td><a href="class138501.html#refclass138501" target = "projectFrame"><b>CompoundMedia</b></a></td><td></td><td>compound of several elementary media tracks,<br />e.g. the individual media streams found in one media file</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128266.html#refclass128266" target = "projectFrame"><b>Condition</b></a></td><td></td><td>I provided a reworked Condition class in my Cinelerra2 repository</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135813.html#refclass135813" target = "projectFrame"><b>Config</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140549.html#refclass140549" target = "projectFrame"><b>ConfigRules</b></a></td><td>interface</td><td>public acces point for running Config Queries</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130821.html#refclass130821" target = "projectFrame"><b>ConManager</b></a></td><td></td><td>Connection Manager, used to build the connections between render engine nodes, if these nodes need to cooperate besides the normal "data pull" operation. Esp., the Connection Manager knows how to wire up the effect's parameters with the corresponding ParamProviders (autmation) in the Session</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130181.html#refclass130181" target = "projectFrame"><b>Constraint</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130309.html#refclass130309" target = "projectFrame"><b>ControllerFacade</b></a></td><td>boundary</td><td>Provides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138245.html#refclass138245" target = "projectFrame"><b>Dataset</b></a></td><td></td><td>meta asset describing a collection of control data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138373.html#refclass138373" target = "projectFrame"><b>DB</b></a></td><td></td><td>Implementation of the registry holding all Asset instances known to the Asset Manager subsystem. As of 8/2007 implemented by a hashtable.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141445.html#refclass141445" target = "projectFrame"><b>DefaultsManager</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141573.html#refclass141573" target = "projectFrame"><b>DefaultsRegistry</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139141.html#refclass139141" target = "projectFrame"><b>DoAttach</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139269.html#refclass139269" target = "projectFrame"><b>DoRecurse</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128133.html#refclass128133" target = "projectFrame"><b>EDL</b></a></td><td></td><td></td></tr>
@ -102,13 +105,17 @@
<tr bgcolor=#f0f0f0><td><a href="class131717.html#refclass131717" target = "projectFrame"><b>ProcNode</b></a></td><td>interface</td><td>Key abstraction of the Render Engine: A Data processing Node</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138757.html#refclass138757" target = "projectFrame"><b>ProcPatt</b></a></td><td></td><td>special type of structural Asset representing information how to build some part of the render engine's processing nodes network.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132229.html#refclass132229" target = "projectFrame"><b>Projector</b></a></td><td></td><td>Special video processing node used to scale and translate image data.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140677.html#refclass140677" target = "projectFrame"><b>QueryHandler</b></a></td><td>interface</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141189.html#refclass141189" target = "projectFrame"><b>QueryHandlerImpl</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativeLocation</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a></td><td>enum</td><td>the possible kinds of RelativePlacements</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131333.html#refclass131333" target = "projectFrame"><b>RenderEngine</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130949.html#refclass130949" target = "projectFrame"><b>RenderState</b></a></td><td></td><td>Encapsulates the logic used to get a "current render process" in accordance to the currentyl applicable controller settings. The provided StateProxy serves to hold any mutalbe state used in the render process, so the rest of the render engine can be stateless.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140933.html#refclass140933" target = "projectFrame"><b>ResolverBase</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129205.html#refclass129205" target = "projectFrame"><b>Scheduler</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135173.html#refclass135173" target = "projectFrame"><b>Segment</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refclass134277" target = "projectFrame"><b>SegmentationTool</b></a></td><td></td><td>Tool implementation for deriving a partitioning of the current timeline such, that each segement has a constant configuration. "Constant" means here, that any remaining changes over time can be represented by automation solely, without the need to change the node connections.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141829.html#refclass141829" target = "projectFrame"><b>Serializer</b></a></td><td>actor</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139653.html#refclass139653" target = "projectFrame"><b>Session</b></a></td><td></td><td>Primary Interface for all editing tasks.<br />The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128005.html#refclass128005" target = "projectFrame"><b>SessionImpl</b></a></td><td></td><td>Implementation class for the Session interface</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139781.html#refclass139781" target = "projectFrame"><b>SessManager</b></a></td><td></td><td></td></tr>
@ -126,13 +133,17 @@
<tr bgcolor=#f0f0f0><td><a href="class137989.html#refclass137989" target = "projectFrame"><b>Track</b></a></td><td></td><td>structural asset holding the configuration of a track in the EDL</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128389.html#refclass128389" target = "projectFrame"><b>Track</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131845.html#refclass131845" target = "projectFrame"><b>Trafo</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140805.html#refclass140805" target = "projectFrame"><b>TypeHandler</b></a></td><td>interface</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141317.html#refclass141317" target = "projectFrame"><b>TypeHandler&lt;Pipe&gt;</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137477.html#refclass137477" target = "projectFrame"><b>Unknown</b></a></td><td></td><td>placeholder for unknown or unavailable media source</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141701.html#refclass141701" target = "projectFrame"><b>User</b></a></td><td>actor</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133509.html#refclass133509" target = "projectFrame"><b>VFrame</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140165.html#refclass140165" target = "projectFrame"><b>Visitable</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132997.html#refclass132997" target = "projectFrame"><b>VRender</b></a></td><td></td><td>Representation of a Video render process. (Encapsulates the video buffers for the actual calculations)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130053.html#refclass130053" target = "projectFrame"><b>Wish</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129162.html#refclass129162" target = "projectFrame"><b>WriteBuffer</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129034.html#refclass129034" target = "projectFrame"><b>WriteBufferPool</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141061.html#refclass141061" target = "projectFrame"><b>YAP_Prolog</b></a></td><td></td><td></td></tr>
</table>
</body>
</html>

View file

@ -40,11 +40,14 @@
<a href="class138501.html#refclass138501" target = "projectFrame"><b>CompoundMedia</b></a><br />
<a href="class128266.html#refclass128266" target = "projectFrame"><b>Condition</b></a><br />
<a href="class135813.html#refclass135813" target = "projectFrame"><b>Config</b></a><br />
<a href="class140549.html#refclass140549" target = "projectFrame"><b>ConfigRules</b></a><br />
<a href="class130821.html#refclass130821" target = "projectFrame"><b>ConManager</b></a><br />
<a href="class130181.html#refclass130181" target = "projectFrame"><b>Constraint</b></a><br />
<a href="class130309.html#refclass130309" target = "projectFrame"><b>ControllerFacade</b></a><br />
<a href="class138245.html#refclass138245" target = "projectFrame"><b>Dataset</b></a><br />
<a href="class138373.html#refclass138373" target = "projectFrame"><b>DB</b></a><br />
<a href="class141445.html#refclass141445" target = "projectFrame"><b>DefaultsManager</b></a><br />
<a href="class141573.html#refclass141573" target = "projectFrame"><b>DefaultsRegistry</b></a><br />
<a href="class139141.html#refclass139141" target = "projectFrame"><b>DoAttach</b></a><br />
<a href="class139269.html#refclass139269" target = "projectFrame"><b>DoRecurse</b></a><br />
<a href="class128133.html#refclass128133" target = "projectFrame"><b>EDL</b></a><br />
@ -103,13 +106,17 @@
<a href="class131717.html#refclass131717" target = "projectFrame"><b>ProcNode</b></a><br />
<a href="class138757.html#refclass138757" target = "projectFrame"><b>ProcPatt</b></a><br />
<a href="class132229.html#refclass132229" target = "projectFrame"><b>Projector</b></a><br />
<a href="class140677.html#refclass140677" target = "projectFrame"><b>QueryHandler</b></a><br />
<a href="class141189.html#refclass141189" target = "projectFrame"><b>QueryHandlerImpl</b></a><br />
<a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativeLocation</b></a><br />
<a href="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a><br />
<a href="class131333.html#refclass131333" target = "projectFrame"><b>RenderEngine</b></a><br />
<a href="class130949.html#refclass130949" target = "projectFrame"><b>RenderState</b></a><br />
<a href="class140933.html#refclass140933" target = "projectFrame"><b>ResolverBase</b></a><br />
<a href="class129205.html#refclass129205" target = "projectFrame"><b>Scheduler</b></a><br />
<a href="class135173.html#refclass135173" target = "projectFrame"><b>Segment</b></a><br />
<a href="class134277.html#refclass134277" target = "projectFrame"><b>SegmentationTool</b></a><br />
<a href="class141829.html#refclass141829" target = "projectFrame"><b>Serializer</b></a><br />
<a href="class139653.html#refclass139653" target = "projectFrame"><b>Session</b></a><br />
<a href="class128005.html#refclass128005" target = "projectFrame"><b>SessionImpl</b></a><br />
<a href="class139781.html#refclass139781" target = "projectFrame"><b>SessManager</b></a><br />
@ -127,13 +134,17 @@
<a href="class137989.html#refclass137989" target = "projectFrame"><b>Track</b></a><br />
<a href="class128389.html#refclass128389" target = "projectFrame"><b>Track</b></a><br />
<a href="class131845.html#refclass131845" target = "projectFrame"><b>Trafo</b></a><br />
<a href="class140805.html#refclass140805" target = "projectFrame"><b>TypeHandler</b></a><br />
<a href="class141317.html#refclass141317" target = "projectFrame"><b>TypeHandler&lt;Pipe&gt;</b></a><br />
<a href="class137477.html#refclass137477" target = "projectFrame"><b>Unknown</b></a><br />
<a href="class141701.html#refclass141701" target = "projectFrame"><b>User</b></a><br />
<a href="class133509.html#refclass133509" target = "projectFrame"><b>VFrame</b></a><br />
<a href="class140165.html#refclass140165" target = "projectFrame"><b>Visitable</b></a><br />
<a href="class132997.html#refclass132997" target = "projectFrame"><b>VRender</b></a><br />
<a href="class130053.html#refclass130053" target = "projectFrame"><b>Wish</b></a><br />
<a href="class129162.html#refclass129162" target = "projectFrame"><b>WriteBuffer</b></a><br />
<a href="class129034.html#refclass129034" target = "projectFrame"><b>WriteBufferPool</b></a><br />
<a href="class141061.html#refclass141061" target = "projectFrame"><b>YAP_Prolog</b></a><br />
</td>
</tr>
</table>

View file

@ -16,6 +16,7 @@
<!-- ============================================================= -->
<table>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcollaboration diagram131845" target = "projectFrame"><b>"default" object</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcollaboration diagram128517" target = "projectFrame"><b>build process</b></a></td><td></td><td>This figure shows the process of building and starting a RenderEngine</td></tr>
</table>
</body>

View file

@ -17,6 +17,7 @@
<table>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram130693" target = "projectFrame"><b>backend-components</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram131589" target = "projectFrame"><b>components</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram128005" target = "projectFrame"><b>Overview</b></a></td><td></td><td>This drawing shows the top level compoents and relations</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram130053" target = "projectFrame"><b>proc-components</b></a></td><td></td><td></td></tr>
</table>

BIN
doc/devel/uml/fig131461.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
doc/devel/uml/fig131589.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
doc/devel/uml/fig131717.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
doc/devel/uml/fig131845.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -112,7 +112,7 @@ Documentation</title>
<a name="refartifact128005"></a>
<table><tr><td><div class="element">Artifact <b>Lumiera</b></div></td></tr></table>
<p>Depends on <a href="index.html#refpackage129413"><b>common</b></a></p><p>Depends on <a href="index.html#refpackage129797"><b>gui</b></a></p><p>Depends on <a href="index.html#refpackage129669"><b>proc</b></a></p><p>Depends on <a href="index.html#refpackage129541"><b>backend</b></a></p><p>the main executable to be built<br /></p>
<p><i>executable</i> associated with : <a href="index.html#refartifact132229"><b>exitnode</b></a>, <a href="index.html#refartifact131717"><b>pathmanager</b></a>, <a href="index.html#refartifact128901"><b>track</b></a>, <a href="index.html#refartifact134533"><b>paramprovider</b></a>, <a href="index.html#refartifact132997"><b>mask</b></a>, <a href="index.html#refartifact128133"><b>main</b></a>, <a href="index.html#refartifact130693"><b>conmanager</b></a>, <a href="index.html#refartifact129413"><b>clip</b></a>, <a href="index.html#refartifact129669"><b>meta</b></a>, <a href="index.html#refartifact129797"><b>fixedlocation</b></a>, <a href="index.html#refartifact129925"><b>relativelocation</b></a>, <a href="index.html#refartifact128261"><b>mobject</b></a>, <a href="index.html#refartifact134277"><b>source</b></a>, <a href="index.html#refartifact133765"><b>frame</b></a>, <a href="index.html#refartifact129029"><b>placement</b></a>, <a href="index.html#refartifact128517"><b>sessionimpl</b></a>, <a href="index.html#refartifact130437"><b>builderfacade</b></a>, <a href="index.html#refartifact131589"><b>controllerfacade</b></a>, <a href="index.html#refartifact132101"><b>processor</b></a>, <a href="index.html#refartifact133125"><b>pluginadapter</b></a>, <a href="index.html#refartifact129541"><b>effect</b></a>, <a href="index.html#refartifact131205"><b>buildertool</b></a>, <a href="index.html#refartifact131333"><b>segmentationtool</b></a>, <a href="index.html#refartifact133893"><b>aframe</b></a>, <a href="index.html#refartifact130821"><b>assembler</b></a>, <a href="index.html#refartifact132485"><b>trafo</b></a>, <a href="index.html#refartifact129157"><b>explicitplacement</b></a>, <a href="index.html#refartifact130309"><b>auto</b></a>, <a href="index.html#refartifact133637"><b>glrender</b></a>, <a href="index.html#refartifact132613"><b>link</b></a>, <a href="index.html#refartifact134405"><b>parameter</b></a>, <a href="index.html#refartifact131973"><b>renderengine</b></a>, <a href="index.html#refartifact130053"><b>allocation</b></a>, <a href="index.html#refartifact134021"><b>vframe</b></a>, <a href="index.html#refartifact130565"><b>toolfactory</b></a>, <a href="index.html#refartifact133381"><b>arender</b></a>, <a href="index.html#refartifact131845"><b>renderstate</b></a>, <a href="index.html#refartifact130181"><b>label</b></a>, <a href="index.html#refartifact134149"><b>glbuf</b></a>, <a href="index.html#refartifact132357"><b>procnode</b></a>, <a href="index.html#refartifact130949"><b>stateproxy</b></a>, <a href="index.html#refartifact132741"><b>hub</b></a>, <a href="index.html#refartifact131077"><b>buildable</b></a>, <a href="index.html#refartifact129285"><b>abstractmo</b></a>, <a href="index.html#refartifact131461"><b>nodecreatertool</b></a>, <a href="index.html#refartifact132869"><b>projector</b></a>, <a href="index.html#refartifact134661"><b>interpolator</b></a>, <a href="index.html#refartifact128645"><b>edl</b></a>, <a href="index.html#refartifact128773"><b>fixture</b></a>, <a href="index.html#refartifact133253"><b>glpipe</b></a>, <a href="index.html#refartifact133509"><b>vrender</b></a></p>
<p><i>executable</i> associated with : <a href="index.html#refartifact133893"><b>aframe</b></a>, <a href="index.html#refartifact130821"><b>assembler</b></a>, <a href="index.html#refartifact132485"><b>trafo</b></a>, <a href="index.html#refartifact129157"><b>explicitplacement</b></a>, <a href="index.html#refartifact130309"><b>auto</b></a>, <a href="index.html#refartifact133637"><b>glrender</b></a>, <a href="index.html#refartifact132613"><b>link</b></a>, <a href="index.html#refartifact134405"><b>parameter</b></a>, <a href="index.html#refartifact131973"><b>renderengine</b></a>, <a href="index.html#refartifact130053"><b>allocation</b></a>, <a href="index.html#refartifact134021"><b>vframe</b></a>, <a href="index.html#refartifact130565"><b>toolfactory</b></a>, <a href="index.html#refartifact133381"><b>arender</b></a>, <a href="index.html#refartifact131845"><b>renderstate</b></a>, <a href="index.html#refartifact130181"><b>label</b></a>, <a href="index.html#refartifact134149"><b>glbuf</b></a>, <a href="index.html#refartifact132357"><b>procnode</b></a>, <a href="index.html#refartifact130949"><b>stateproxy</b></a>, <a href="index.html#refartifact132741"><b>hub</b></a>, <a href="index.html#refartifact131077"><b>buildable</b></a>, <a href="index.html#refartifact129285"><b>abstractmo</b></a>, <a href="index.html#refartifact131461"><b>nodecreatertool</b></a>, <a href="index.html#refartifact132869"><b>projector</b></a>, <a href="index.html#refartifact134661"><b>interpolator</b></a>, <a href="index.html#refartifact128645"><b>edl</b></a>, <a href="index.html#refartifact128773"><b>fixture</b></a>, <a href="index.html#refartifact133253"><b>glpipe</b></a>, <a href="index.html#refartifact133509"><b>vrender</b></a>, <a href="index.html#refartifact132229"><b>exitnode</b></a>, <a href="index.html#refartifact131717"><b>pathmanager</b></a>, <a href="index.html#refartifact128901"><b>track</b></a>, <a href="index.html#refartifact134533"><b>paramprovider</b></a>, <a href="index.html#refartifact132997"><b>mask</b></a>, <a href="index.html#refartifact128133"><b>main</b></a>, <a href="index.html#refartifact130693"><b>conmanager</b></a>, <a href="index.html#refartifact129413"><b>clip</b></a>, <a href="index.html#refartifact129669"><b>meta</b></a>, <a href="index.html#refartifact129797"><b>fixedlocation</b></a>, <a href="index.html#refartifact129925"><b>relativelocation</b></a>, <a href="index.html#refartifact128261"><b>mobject</b></a>, <a href="index.html#refartifact134277"><b>source</b></a>, <a href="index.html#refartifact133765"><b>frame</b></a>, <a href="index.html#refartifact129029"><b>placement</b></a>, <a href="index.html#refartifact128517"><b>sessionimpl</b></a>, <a href="index.html#refartifact130437"><b>builderfacade</b></a>, <a href="index.html#refartifact131589"><b>controllerfacade</b></a>, <a href="index.html#refartifact132101"><b>processor</b></a>, <a href="index.html#refartifact133125"><b>pluginadapter</b></a>, <a href="index.html#refartifact129541"><b>effect</b></a>, <a href="index.html#refartifact131205"><b>buildertool</b></a>, <a href="index.html#refartifact131333"><b>segmentationtool</b></a></p>
<a name="refartifact128133"></a>
<table><tr><td><div class="element">Artifact <b>main</b></div></td></tr></table>
<p>Artifact <i>source</i></p>
@ -1137,8 +1137,71 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<p>GUI is here just a container to hold any entities considered to be User Interface related, which is not in focus for this Design draft<br /></p><a name="refpackage128517"></a>
<h1 class ="package">5 Package CommonLib</h1>
<div class="sub">
<a name="refpackage131077"></a>
<h2 class ="package">5.1 Package ConfigQuery</h2>
<div class="sub">
<a name="refcomponent view128261"></a>
<h3 class ="view">5.1.1 Component View Query System overview</h3>
<div class="sub">
<a name="refcomponent diagram131589"></a>
<p align="center"><img src="fig131589.png" alt="" /></p>
<p align="center"><b>components</b></p><p><br /></p><p><br /></p>
<a name="refcomponent130565"></a>
<table><tr><td><div class="element">Component <b>ConfigRules</b></div></td></tr></table>
<p>A system for accessing various kinds of preconfigured objects by querying for capabilities.<br /></p>
<a name="refcomponent130693"></a>
<table><tr><td><div class="element">Component <b>Resolver</b></div></td></tr></table>
<a name="refcomponent130821"></a>
<table><tr><td><div class="element">Component <b>Rule Base</b></div></td></tr></table>
<a name="refcomponent130949"></a>
<table><tr><td><div class="element">Component <b>DefaultsManager</b></div></td></tr></table>
</div>
<a name="refclass view129157"></a>
<h3 class ="view">5.1.2 Class View query</h3>
<div class="sub">
<a name="refclass diagram131461"></a>
<p align="center"><img src="fig131461.png" alt="" /></p>
<p align="center"><b>Rules access</b></p><p><br /></p><p><br /></p>
<table><tr><td><div class="element">Class <b><a href="class140549.html#refclass140549"><b>ConfigRules</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class140677.html#refclass140677"><b>QueryHandler</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class140805.html#refclass140805"><b>TypeHandler</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class140933.html#refclass140933"><b>ResolverBase</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class141061.html#refclass141061"><b>YAP_Prolog</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class141317.html#refclass141317"><b>TypeHandler&lt;Pipe&gt;</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class141445.html#refclass141445"><b>DefaultsManager</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class141573.html#refclass141573"><b>DefaultsRegistry</b></a></b></div></td></tr></table>
</div>
<a name="refuse case view128389"></a>
<h3 class ="view">5.1.3 Use Case View query use</h3>
<div class="sub">
<a name="refuse case diagram131717"></a>
<p align="center"><img src="fig131717.png" alt="" /></p>
<p align="center"><b>when to query</b></p><p><br /></p><p><br /></p>
<a name="refuse case128517"></a>
<h4 class ="usecase">5.1.3.1 Use Case create specific object</h4>
<a name="refuse case128645"></a>
<h4 class ="usecase">5.1.3.2 Use Case use "default" object</h4>
<div class="sub">
</div>
<a name="refuse case128773"></a>
<h4 class ="usecase">5.1.3.3 Use Case load object from session</h4>
<a name="refuse case128901"></a>
<h4 class ="usecase">5.1.3.4 Use Case add new object to session</h4>
<table><tr><td><div class="element">Class <b><a href="class141701.html#refclass141701"><b>User</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class141829.html#refclass141829"><b>Serializer</b></a></b></div></td></tr></table>
<a name="refuse case129029"></a>
<h4 class ="usecase">5.1.3.5 Use Case ConfigQuery</h4>
<a name="refuse case129157"></a>
<h4 class ="usecase">5.1.3.6 Use Case need sub object</h4>
<a name="refcollaboration diagram131845"></a>
<p align="center"><img src="fig131845.png" alt="" /></p>
<p align="center"><b>"default" object</b></p><p><br /></p><p><br /></p>
<a name="refclass instance135941"></a>
<table><tr><td><div class="element">Class instance <b>predicate impl</div></td></tr></table><p>type :<a href="class140805.html#refclass140805"><b>TypeHandler</b></a></p></div>
</div>
<a name="refclass view128773"></a>
<h2 class ="view">5.1 Class View error</h2>
<h2 class ="view">5.2 Class View error</h2>
<div class="sub">
<a name="refclass diagram130181"></a>
<p align="center"><img src="fig130181.png" alt="" /></p>
@ -1152,7 +1215,7 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<table><tr><td><div class="element">Class <b><a href="class136325.html#refclass136325"><b>std::exception</b></a></b></div></td></tr></table>
</div>
<a name="refclass view128645"></a>
<h2 class ="view">5.2 Class View Service Components</h2>
<h2 class ="view">5.3 Class View Service Components</h2>
<div class="sub">
<table><tr><td><div class="element">Class <b><a href="class140293.html#refclass140293"><b>Applicable</b></a></b></div></td></tr></table>
<table><tr><td><div class="element">Class <b><a href="class140037.html#refclass140037"><b>Tool</b></a></b></div></td></tr></table>
@ -1162,7 +1225,7 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<table><tr><td><div class="element">Class <b><a href="class135429.html#refclass135429"><b>Appconfig</b></a></b></div></td></tr></table>
</div>
<a name="refclass view128138"></a>
<h2 class ="view">5.3 Class View Posix Threads Abstraction</h2>
<h2 class ="view">5.4 Class View Posix Threads Abstraction</h2>
<p>C++ wrapers for pthreads<br /></p>
<div class="sub">
<table><tr><td><div class="element">Class <b><a href="class128138.html#refclass128138"><b>Thread</b></a></b></div></td></tr></table>
@ -1170,7 +1233,7 @@ reuse exiting Engine</pre></li></ul><p>Selection :</p><ul></ul><p>Transformation
<table><tr><td><div class="element">Class <b><a href="class128394.html#refclass128394"><b>Mutex</b></a></b></div></td></tr></table>
</div>
<a name="refclass view128266"></a>
<h2 class ="view">5.4 Class View SmartPointers</h2>
<h2 class ="view">5.5 Class View SmartPointers</h2>
<div class="sub">
<table><tr><td><div class="element">Class <b><a href="class128906.html#refclass128906"><b>SmartPointer</b></a></b></div></td></tr></table>
</div>

View file

@ -0,0 +1,23 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>"</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">"</div>
<p></p>
<!-- ============================================================= -->
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcollaboration diagram131845" target = "projectFrame"><b>"default" object</b></a></td><td>collaboration diagram</td><td></td></tr>
</table>
</body>
</html>

View file

@ -30,8 +30,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition129029" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130181" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131717" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131077" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130949" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition131077" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130053" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition128901" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reftransition130565" target = "projectFrame"><b>&lt;flow&gt;</b></a></td><td>transition</td><td></td></tr>

View file

@ -23,6 +23,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128133" target = "projectFrame"><b>access File</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity final129157" target = "projectFrame"><b>activity final</b></a></td><td>activity final</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity final128901" target = "projectFrame"><b>activity final</b></a></td><td>activity final</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128901" target = "projectFrame"><b>add new object to session</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133381.html#refclass133381" target = "projectFrame"><b>AFrame</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact133893" target = "projectFrame"><b>aframe</b></a></td><td>artifact</td><td>a buffer and render process holding a Audio frame</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact130053" target = "projectFrame"><b>allocation</b></a></td><td>artifact</td><td></td></tr>
@ -55,8 +56,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131845" target = "projectFrame"><b>aud_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131205" target = "projectFrame"><b>audio</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130821" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128389" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128901" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128389" target = "projectFrame"><b>audio1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact130309" target = "projectFrame"><b>auto</b></a></td><td>artifact</td><td>Media Object holding automation data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129925.html#refclass129925" target = "projectFrame"><b>Auto</b></a></td><td>class</td><td>Automation data for some parameter (i.e. a time varying function)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram129669" target = "projectFrame"><b>Automation Entities</b></a></td><td>class diagram</td><td></td></tr>

View file

@ -23,42 +23,42 @@
<tr bgcolor=#f0f0f0><td><a href="class137221.html#refclass137221" target = "projectFrame"><b>Category</b></a></td><td>class</td><td>tree like classification of Assets</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact135941" target = "projectFrame"><b>category</b></a></td><td>artifact</td><td>tree like classification of Assets</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130309" target = "projectFrame"><b>cause</b></a></td><td>attribute</td><td>a copy of the first exception encountered in this exception chain</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134277" target = "projectFrame"><b>chain</b></a></td><td>operation</td><td>create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation145413" target = "projectFrame"><b>chain</b></a></td><td>relation</td><td>Chain of additional Placements further constraining the position of this MObject</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134277" target = "projectFrame"><b>chain</b></a></td><td>operation</td><td>create and add another Placement for this media object, thus increasingly constraining the (possible) position of this object.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129633" target = "projectFrame"><b>checked_in</b></a></td><td>relation</td><td>checked_in objects are subject of cache aging and must be not in use</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129290" target = "projectFrame"><b>checked_out</b></a></td><td>relation</td><td>this list keeps all mappings which are in use, and thus prevents them from Cache aging</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134917" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134789" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135557" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134661" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135301" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135045" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134917" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135429" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134789" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135557" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135685" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134661" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135173" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135813" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131589" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132229" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129797" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128133" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130693" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128005" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128261" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129541" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130565" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132357" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130437" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128261" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133509" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132229" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128133" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132485" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129029" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129285" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129541" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132357" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130309" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129797" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130181" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130053" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133509" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129029" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130693" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129285" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131589" target = "projectFrame"><b>class instance</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133765" target = "projectFrame"><b>clear</b></a></td><td>operation</td><td>clear current session contents <br />without resetting overall session config.<br />Afterwards, the session will contain only one <br />empty EDL, while all Assets are retained.<br /></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137349.html#refclass137349" target = "projectFrame"><b>Clip</b></a></td><td>class</td><td>bookkeeping (asset) view of a media clip.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129413" target = "projectFrame"><b>clip</b></a></td><td>artifact</td><td>a Media Clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact136325" target = "projectFrame"><b>clip</b></a></td><td>artifact</td><td>bookkeeping (asset) view of a media clip.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129413" target = "projectFrame"><b>clip</b></a></td><td>artifact</td><td>a Media Clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128901.html#refclass128901" target = "projectFrame"><b>Clip</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128901" target = "projectFrame"><b>clips</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137861.html#refclass137861" target = "projectFrame"><b>Codec</b></a></td><td>class</td><td>description of some media data decoder or encoder facility</td></tr>
@ -71,6 +71,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128517" target = "projectFrame"><b>CommonLib</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity object128517" target = "projectFrame"><b>complete Render Engine</b></a></td><td>activity object</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation143493" target = "projectFrame"><b>components</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram131589" target = "projectFrame"><b>components</b></a></td><td>component diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact138501" target = "projectFrame"><b>compoundclip</b></a></td><td>artifact</td><td>compound of several clips (multichannel)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138629.html#refclass138629" target = "projectFrame"><b>CompoundClip</b></a></td><td>class</td><td>Clip MObject which is actually a compound of several elementary clips,<br />e.g. the several streams found within multichannels media.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138501.html#refclass138501" target = "projectFrame"><b>CompoundMedia</b></a></td><td>class</td><td>compound of several elementary media tracks,<br />e.g. the individual media streams found in one media file</td></tr>
@ -78,6 +79,10 @@
<tr bgcolor=#f0f0f0><td><a href="class128266.html#refclass128266" target = "projectFrame"><b>Condition</b></a></td><td>class</td><td>I provided a reworked Condition class in my Cinelerra2 repository</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135813.html#refclass135813" target = "projectFrame"><b>Config</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case view128261" target = "projectFrame"><b>config examples</b></a></td><td>use case view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage131077" target = "projectFrame"><b>ConfigQuery</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case129029" target = "projectFrame"><b>ConfigQuery</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140549.html#refclass140549" target = "projectFrame"><b>ConfigRules</b></a></td><td>class</td><td>public acces point for running Config Queries</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent130565" target = "projectFrame"><b>ConfigRules</b></a></td><td>component</td><td>A system for accessing various kinds of preconfigured objects by querying for capabilities.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128773" target = "projectFrame"><b>configure</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity128133" target = "projectFrame"><b>configure Render</b></a></td><td>activity</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action128645" target = "projectFrame"><b>configure Tools</b></a></td><td>opaque activity action</td><td></td></tr>
@ -88,14 +93,15 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact139397" target = "projectFrame"><b>constraint</b></a></td><td>artifact</td><td>LocatingPin representing an directive by the user that<br />must not be violated</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130181.html#refclass130181" target = "projectFrame"><b>Constraint</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128261" target = "projectFrame"><b>Controller</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130693" target = "projectFrame"><b>controller</b></a></td><td>package</td><td>sourcecode package<br /><br />The Processing and Render Controller,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129029" target = "projectFrame"><b>Controller</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130693" target = "projectFrame"><b>controller</b></a></td><td>package</td><td>sourcecode package<br /><br />The Processing and Render Controller,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128645" target = "projectFrame"><b>Controller Entities</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128389" target = "projectFrame"><b>Controller Workings</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130309.html#refclass130309" target = "projectFrame"><b>ControllerFacade</b></a></td><td>class</td><td>Provides unified access to the Proc-Subsystem Controller. Especially, this Facade class provides the functions to get a render engine to carry out actual renderings.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact131589" target = "projectFrame"><b>controllerfacade</b></a></td><td>artifact</td><td>Facade and service access point for the Proc Layer Controller</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent129541" target = "projectFrame"><b>ControllerFacade</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action128901" target = "projectFrame"><b>create ProcNode</b></a></td><td>opaque activity action</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128517" target = "projectFrame"><b>create specific object</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133253" target = "projectFrame"><b>createClip</b></a></td><td>operation</td><td>create a (possibly compound) Clip refering to this media, ready to be added to the EDL.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133509" target = "projectFrame"><b>currEDL</b></a></td><td>operation</td><td>The EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation144773" target = "projectFrame"><b>current</b></a></td><td>relation</td><td>Standard access path to get at the current session via the Session Manager, which acts as a "PImpl" smart pointer</td></tr>

View file

@ -22,14 +22,18 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation136965" target = "projectFrame"><b>datasrc</b></a></td><td>relation</td><td>The predecessor in a processing pipeline, i.e. a source to get data to be processed</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class138373.html#refclass138373" target = "projectFrame"><b>DB</b></a></td><td>class</td><td>Implementation of the registry holding all Asset instances known to the Asset Manager subsystem. As of 8/2007 implemented by a hashtable.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137861" target = "projectFrame"><b>db</b></a></td><td>artifact</td><td>registry holding known Asset instances.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation150917" target = "projectFrame"><b>defaults</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141445.html#refclass141445" target = "projectFrame"><b>DefaultsManager</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent130949" target = "projectFrame"><b>DefaultsManager</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141573.html#refclass141573" target = "projectFrame"><b>DefaultsRegistry</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action128773" target = "projectFrame"><b>define segment</b></a></td><td>opaque activity action</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128437" target = "projectFrame"><b>descriptor</b></a></td><td>relation</td><td>type of this frame</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128481" target = "projectFrame"><b>descriptor</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128138" target = "projectFrame"><b>design</b></a></td><td>package</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128005" target = "projectFrame"><b>design</b></a></td><td>package</td><td>All things concering the big picture.<br />Not a real code package, rather a container for design drafts, specifications, decisions.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128261" target = "projectFrame"><b>detect Channels</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action128389" target = "projectFrame"><b>determine Render Params</b></a></td><td>opaque activity action</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refexpansion region128005" target = "projectFrame"><b>determine Render Params</b></a></td><td>expansion region</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refopaque activity action128389" target = "projectFrame"><b>determine Render Params</b></a></td><td>opaque activity action</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132613" target = "projectFrame"><b>devnull</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128773" target = "projectFrame"><b>Dispatcher</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134917" target = "projectFrame"><b>dispatchOp</b></a></td><td>operation</td><td></td></tr>

View file

@ -24,8 +24,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refobject diagram128901" target = "projectFrame"><b>EDL Example2</b></a></td><td>object diagram</td><td>More complex example showing the Object graph in the EDL and how it is linked into the Fixture to yield the actual locations. In this example, an HUE Effect is applied on a part of the Clip</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128005" target = "projectFrame"><b>edls</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137733.html#refclass137733" target = "projectFrame"><b>Effect</b></a></td><td>class</td><td>Effect or media processing component</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137221" target = "projectFrame"><b>effect</b></a></td><td>artifact</td><td>Effect or media processing component</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129541" target = "projectFrame"><b>effect</b></a></td><td>artifact</td><td>EDL representation of a pluggable and automatable effect.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137221" target = "projectFrame"><b>effect</b></a></td><td>artifact</td><td>Effect or media processing component</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129029.html#refclass129029" target = "projectFrame"><b>Effect</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation138885" target = "projectFrame"><b>elements</b></a></td><td>relation</td><td>relevant MObjects comprising this segment. TODO: actually necessary??</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132997" target = "projectFrame"><b>enable</b></a></td><td>operation</td><td>change the enabled status of this asset. Note the corresponding #isActive predicate may depend on the enablement status of parent assets as well</td></tr>

View file

@ -29,12 +29,13 @@
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refclass129333" target = "projectFrame"><b>FileProvider</b></a></td><td>class</td><td>This is the Factory for Files, whenever something wants to use some file (or temporary storage), This Factory will hand out some smart/shared pointer to a File object which will be used to retrieve Frames.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128778.html#refclass128778" target = "projectFrame"><b>FileReference</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation129034" target = "projectFrame"><b>files</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation135045" target = "projectFrame"><b>find</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129797" target = "projectFrame"><b>fixedlocation</b></a></td><td>artifact</td><td>implements fixed placement of a MObject</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129285.html#refclass129285" target = "projectFrame"><b>FixedLocation</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity object128005" target = "projectFrame"><b>Fixture</b></a></td><td>activity object</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128773" target = "projectFrame"><b>fixture</b></a></td><td>artifact</td><td>the (low level) representation of the EDL with concrete placement data</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128261.html#refclass128261" target = "projectFrame"><b>Fixture</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128517" target = "projectFrame"><b>Fixture</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128261.html#refclass128261" target = "projectFrame"><b>Fixture</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#reffork activity node129029" target = "projectFrame"><b>fork activity node</b></a></td><td>fork activity node</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128821.html#refclass128821" target = "projectFrame"><b>Frame</b></a></td><td>class</td><td>Frames are just a low level lump of continous memory, most parts are opaque. Frames are memory sensitive, they will be small constant sized structures which can be efficently managed in a pool.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refnode128645" target = "projectFrame"><b>Frame</b></a></td><td>node</td><td></td></tr>

View file

@ -24,8 +24,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133381" target = "projectFrame"><b>howtoProc</b></a></td><td>operation</td><td>@return descriptor how to build a render pipeline corresponding to this media</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132101.html#refclass132101" target = "projectFrame"><b>Hub</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132741" target = "projectFrame"><b>hub</b></a></td><td>artifact</td><td>special ProcNode used to build data distributing connections</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133253" target = "projectFrame"><b>HUE</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133893" target = "projectFrame"><b>HUE</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133253" target = "projectFrame"><b>HUE</b></a></td><td>class instance</td><td></td></tr>
</table>
</body>
</html>

View file

@ -20,9 +20,9 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130437" target = "projectFrame"><b>id</b></a></td><td>attribute</td><td>Asset primary key.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128309" target = "projectFrame"><b>In Memory Database</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity action pin128133" target = "projectFrame"><b>inFixture</b></a></td><td>activity action pin</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134149" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132869" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131461" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134149" target = "projectFrame"><b>input</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131461" target = "projectFrame"><b>instance</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation143621" target = "projectFrame"><b>instructions</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view129029" target = "projectFrame"><b>Interface</b></a></td><td>class view</td><td></td></tr>

View file

@ -25,6 +25,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132613" target = "projectFrame"><b>link</b></a></td><td>artifact</td><td>forwarding, adapting or connecting ProcNode</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134021" target = "projectFrame"><b>load</b></a></td><td>operation</td><td>replace the current session by a new<br />session loaded from serialized state.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128005" target = "projectFrame"><b>load Media</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128773" target = "projectFrame"><b>load object from session</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact139013" target = "projectFrame"><b>locatingpin</b></a></td><td>artifact</td><td>Chaining and constraining the Placement of a Media Object</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139909.html#refclass139909" target = "projectFrame"><b>LocatingPin</b></a></td><td>class</td><td>An element with value semantics, which actually implements the placement of some MObject by positioning it in some way.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128522.html#refclass128522" target = "projectFrame"><b>Lock</b></a></td><td>class</td><td></td></tr>

View file

@ -18,6 +18,7 @@
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128133" target = "projectFrame"><b>main</b></a></td><td>artifact</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation135173" target = "projectFrame"><b>make</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128522" target = "projectFrame"><b>mapping</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation128609" target = "projectFrame"><b>mappings</b></a></td><td>relation</td><td>weak pointers</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class132357.html#refclass132357" target = "projectFrame"><b>Mask</b></a></td><td>class</td><td></td></tr>

View file

@ -18,6 +18,7 @@
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130565" target = "projectFrame"><b>name</b></a></td><td>attribute</td><td>element ID, comprehensible but sanitized. The tuple (category, name, org) is unique.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case129157" target = "projectFrame"><b>need sub object</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation146053" target = "projectFrame"><b>next</b></a></td><td>relation</td><td>next additional LocatingPin, if any</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact131461" target = "projectFrame"><b>nodecreatertool</b></a></td><td>artifact</td><td>central Tool implementing the Renderengine building</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refclass134405" target = "projectFrame"><b>NodeCreatorTool</b></a></td><td>class</td><td>This Tool implementation plays the central role in the buld process: given a MObject from Session, it is able to attach ProcNodes to the render engine under construction such as to reflect the properties of the MObject in the actual render.</td></tr>

View file

@ -19,9 +19,9 @@
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute129029" target = "projectFrame"><b>offset</b></a></td><td>attribute</td><td>Offset the actual position by this (time) value relative to the anchor point. TODO: Representation?</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130821" target = "projectFrame"><b>org</b></a></td><td>attribute</td><td>origin or authorship id. Can be a project abbreviation, a package id or just the authors nickname or UID. This allows for the compnent name to be more generic (e.g. "blur"). Default for all assets provided by the core Lumiera codebase is "lumi".</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131333" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134405" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133125" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131333" target = "projectFrame"><b>ouput</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation147973" target = "projectFrame"><b>outPort</b></a></td><td>relation</td><td>the Port this MObject wants to be conected to</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation132613" target = "projectFrame"><b>output</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent diagram128005" target = "projectFrame"><b>Overview</b></a></td><td>component diagram</td><td>This drawing shows the top level compoents and relations</td></tr>

View file

@ -40,6 +40,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refnode128517" target = "projectFrame"><b>pnode</b></a></td><td>node</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute131461" target = "projectFrame"><b>point</b></a></td><td>attribute</td><td>identifying the point where the nodes should be attached</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128138" target = "projectFrame"><b>Posix Threads Abstraction</b></a></td><td>class view</td><td>C++ wrapers for pthreads</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance135941" target = "projectFrame"><b>predicate impl</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129077.html#refclass129077" target = "projectFrame"><b>Prefetch</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class137605.html#refclass137605" target = "projectFrame"><b>Preview</b></a></td><td>class</td><td>alternative version of the media data, probably with lower resolution</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact136965" target = "projectFrame"><b>preview</b></a></td><td>artifact</td><td>alternative version of the media data, probably with lower resolution</td></tr>

View file

@ -0,0 +1,27 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Q</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Q</div>
<p></p>
<!-- ============================================================= -->
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view129157" target = "projectFrame"><b>query</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent view128261" target = "projectFrame"><b>Query System overview</b></a></td><td>component view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case view128389" target = "projectFrame"><b>query use</b></a></td><td>use case view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140677.html#refclass140677" target = "projectFrame"><b>QueryHandler</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141189.html#refclass141189" target = "projectFrame"><b>QueryHandlerImpl</b></a></td><td>class</td><td></td></tr>
</table>
</body>
</html>

View file

@ -22,8 +22,8 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation142085" target = "projectFrame"><b>registry</b></a></td><td>relation</td><td>@internal Table or DB holding all registered asset instances.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact129925" target = "projectFrame"><b>relativelocation</b></a></td><td>artifact</td><td>Placement implemnetaion providing various ways of attaching a MObject to another one</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129413.html#refclass129413" target = "projectFrame"><b>RelativeLocation</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128133" target = "projectFrame"><b>relType</b></a></td><td>attribute</td><td>the kind of relation denoted by this Placement</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133893.html#refclass133893" target = "projectFrame"><b>RelType</b></a></td><td>class</td><td>the possible kinds of RelativePlacements</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128133" target = "projectFrame"><b>relType</b></a></td><td>attribute</td><td>the kind of relation denoted by this Placement</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation132741" target = "projectFrame"><b>remove</b></a></td><td>operation</td><td>remove the given asset &lt;i&gt;together with all its dependants&lt;/i&gt; from the internal DB</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128389" target = "projectFrame"><b>Render Entities</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity parameter128005" target = "projectFrame"><b>Render Request</b></a></td><td>activity parameter</td><td></td></tr>
@ -38,7 +38,13 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128773" target = "projectFrame"><b>repr</b></a></td><td>attribute</td><td>human readable representation of the condition characterizing this allocaton, e.g. "t &gt;= 10"</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation133893" target = "projectFrame"><b>reset</b></a></td><td>operation</td><td>reset all session config and <br />start with a pristine default session.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128005" target = "projectFrame"><b>resolve</b></a></td><td>operation</td><td>create an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation135301" target = "projectFrame"><b>resolve</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation135429" target = "projectFrame"><b>resolve</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent130693" target = "projectFrame"><b>Resolver</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140933.html#refclass140933" target = "projectFrame"><b>ResolverBase</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131973" target = "projectFrame"><b>rootCause</b></a></td><td>operation</td><td>If this exception was caused by a chain of further exceptions,<br />return the first one registered in this throw sequence.<br />This works only, if every exceptions thrown as a consequence<br />of another exception is propperly constructed by passing<br />the original exception to the constructor</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent130821" target = "projectFrame"><b>Rule Base</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram131461" target = "projectFrame"><b>Rules access</b></a></td><td>class diagram</td><td></td></tr>
</table>
</body>
</html>

View file

@ -28,11 +28,12 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity object128389" target = "projectFrame"><b>segments</b></a></td><td>activity object</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refactivity object128133" target = "projectFrame"><b>segments</b></a></td><td>activity object</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation139013" target = "projectFrame"><b>segments</b></a></td><td>relation</td><td>the partitioning of the Timeline to be created by this tool.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141829.html#refclass141829" target = "projectFrame"><b>Serializer</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128645" target = "projectFrame"><b>Service Components</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refcomponent128133" target = "projectFrame"><b>Session</b></a></td><td>component</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact138757" target = "projectFrame"><b>session</b></a></td><td>artifact</td><td>Interface: the session edited by the user</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130437" target = "projectFrame"><b>session</b></a></td><td>package</td><td>sourcecode package<br /><br />Everything concerning the EDL and Session, within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass view128005" target = "projectFrame"><b>Session</b></a></td><td>class view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130437" target = "projectFrame"><b>session</b></a></td><td>package</td><td>sourcecode package<br /><br />Everything concerning the EDL and Session, within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139653.html#refclass139653" target = "projectFrame"><b>Session</b></a></td><td>class</td><td>Primary Interface for all editing tasks.<br />The session contains defaults, all the assets being edited, and a set of EDL with the individual MObjects to be manipulated and rendered.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass diagram128133" target = "projectFrame"><b>Session structure</b></a></td><td>class diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128517" target = "projectFrame"><b>sessionimpl</b></a></td><td>artifact</td><td>holds the complete session data to be edited by the user</td></tr>

View file

@ -34,21 +34,23 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation147333" target = "projectFrame"><b>track</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute128389" target = "projectFrame"><b>track</b></a></td><td>attribute</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation147589" target = "projectFrame"><b>track</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137477" target = "projectFrame"><b>track</b></a></td><td>artifact</td><td>structural asset holding the configuration of a track in the EDL</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact128901" target = "projectFrame"><b>track</b></a></td><td>artifact</td><td>A grouping device within the EDL. The corresponding Placement<br />by which this Track object is refered defines fallback placing<br />properties to be used by all objects placed on this track in<br />case they don't specify more concrete placements.<br />Typically, tracks are used do make default Port connections,<br />define a layer or pan for sound and for for disabling groups<br />of clips. Note tracks are grouped in a tree like fashion.<br /></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137477" target = "projectFrame"><b>track</b></a></td><td>artifact</td><td>structural asset holding the configuration of a track in the EDL</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128389.html#refclass128389" target = "projectFrame"><b>Track</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation142341" target = "projectFrame"><b>tracks</b></a></td><td>relation</td><td>elementary media assets comprising this compound</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131845.html#refclass131845" target = "projectFrame"><b>Trafo</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact132485" target = "projectFrame"><b>trafo</b></a></td><td>artifact</td><td>transforming processing Node </td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation134405" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation129797" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td>This operation is to be overloaded for the specific MObject subclasses to be treated.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130309" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130693" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130565" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130437" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130309" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation129925" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130053" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation130181" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation129925" target = "projectFrame"><b>treat</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140805.html#refclass140805" target = "projectFrame"><b>TypeHandler</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141317.html#refclass141317" target = "projectFrame"><b>TypeHandler&lt;Pipe&gt;</b></a></td><td>class</td><td></td></tr>
</table>
</body>
</html>

View file

@ -20,7 +20,9 @@
<tr bgcolor=#f0f0f0><td><a href="class137477.html#refclass137477" target = "projectFrame"><b>Unknown</b></a></td><td>class</td><td>placeholder for unknown or unavailable media source</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact137093" target = "projectFrame"><b>unknown</b></a></td><td>artifact</td><td>placeholder for unknown or unavailable media source</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case view128133" target = "projectFrame"><b>usage</b></a></td><td>use case view</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128645" target = "projectFrame"><b>use "default" object</b></a></td><td>use case</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128010" target = "projectFrame"><b>useFile</b></a></td><td>operation</td><td>Announces that the application intends to use this file with mode (READ|WRITE|READWRITE)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141701.html#refclass141701" target = "projectFrame"><b>User</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation128138" target = "projectFrame"><b>useTemporaryStorage</b></a></td><td>operation</td><td>Provides a pool for interminate frames</td></tr>
</table>
</body>

View file

@ -20,23 +20,23 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refattribute130949" target = "projectFrame"><b>version</b></a></td><td>attribute</td><td>version number of the thing or concept represented by this asset. Of each unique tuple (name, category, org) there will be only one version in the whole system. Version 0 is reserved for internal purposes. Versions are considered to be ordered, and any higher version is supposed to be fully backwards compatible to all previous versions.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class133509.html#refclass133509" target = "projectFrame"><b>VFrame</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact134021" target = "projectFrame"><b>vframe</b></a></td><td>artifact</td><td>a buffer and render process holding a Video frame</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131973" target = "projectFrame"><b>vid1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133381" target = "projectFrame"><b>vid1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131717" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134021" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129413" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131973" target = "projectFrame"><b>vid1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129925" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129413" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134021" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131717" target = "projectFrame"><b>vid_a</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128645" target = "projectFrame"><b>vid_A</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134533" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131077" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133765" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132741" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance131077" target = "projectFrame"><b>video</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130949" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance129157" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance134277" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance132997" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128517" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance130949" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance133637" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refclass instance128517" target = "projectFrame"><b>video1</b></a></td><td>class instance</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140165.html#refclass140165" target = "projectFrame"><b>Visitable</b></a></td><td>class</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130949" target = "projectFrame"><b>visitor</b></a></td><td>package</td><td>sub-namespace for visitor library implementation</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact139141" target = "projectFrame"><b>visitor</b></a></td><td>artifact</td><td>Acyclic Visitor library</td></tr>

View file

@ -19,6 +19,7 @@
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131845" target = "projectFrame"><b>what</b></a></td><td>operation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refoperation131717" target = "projectFrame"><b>what</b></a></td><td>operation</td><td>the base class of all exceptions thrown by the standard library</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case diagram131717" target = "projectFrame"><b>when to query</b></a></td><td>use case diagram</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refrelation148229" target = "projectFrame"><b>wiringTemplate</b></a></td><td>relation</td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refartifact139269" target = "projectFrame"><b>wish</b></a></td><td>artifact</td><td>LocatingPin representing a low-priority directive by the user,<br />to be fulfilled only if possible (and after satisfying the<br />more important LocatingPins)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class130053.html#refclass130053" target = "projectFrame"><b>Wish</b></a></td><td>class</td><td></td></tr>

View file

@ -0,0 +1,23 @@
<!-- Documentation produced by the Html generator of Bouml (http://bouml.free.fr) -->
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<title>Y</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body bgcolor="#ffffff">
<div class = "title">Y</div>
<p></p>
<!-- ============================================================= -->
<table>
<tr bgcolor=#f0f0f0><td align=center><b>Name</b></td><td align=center><b>Kind</b></td><td align=center><b>Description</b></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141061.html#refclass141061" target = "projectFrame"><b>YAP_Prolog</b></a></td><td>class</td><td></td></tr>
</table>
</body>
</html>

View file

@ -12,6 +12,6 @@
<p><a href="index.html" target = "projectFrame"><b> -Top- </b></a><a href="classes.html" target = "projectFrame"><b> -Classes- </b></a><a href="public_operations.html" target = "projectFrame"><b> -Public Operations- </b></a><a href="public_properties.html" target = "projectFrame"><b> -Public properties- </b></a><a href="packages.html" target = "projectFrame"><b> -Packages- </b></a><a href="usecases.html" target = "projectFrame"><b> -Use Cases- </b></a><a href="activities.html" target = "projectFrame"><b> -Activities- </b></a><a href="classdiagrams.html" target = "projectFrame"><b> -Class Diagrams- </b></a><a href="objectdiagrams.html" target = "projectFrame"><b> -Object Diagrams- </b></a><a href="activitydiagrams.html" target = "projectFrame"><b> -Activity Diagrams- </b></a><a href="usecasediagrams.html" target = "projectFrame"><b> -Use Case Diagrams- </b></a><a href="collaborationdiagrams.html" target = "projectFrame"><b> -Collaboration Diagrams- </b></a><a href="componentdiagrams.html" target = "projectFrame"><b> -Component Diagrams- </b></a><a href="deploymentdiagrams.html" target = "projectFrame"><b> -Deployment Diagrams- </b></a></p>
<p>
</p>
<p><a href="index_60.html" target = "projectFrame"><b> &lt; </b></a><a href="index_65.html" target = "projectFrame"><b> A </b></a><a href="index_66.html" target = "projectFrame"><b> B </b></a><a href="index_67.html" target = "projectFrame"><b> C </b></a><a href="index_68.html" target = "projectFrame"><b> D </b></a><a href="index_69.html" target = "projectFrame"><b> E </b></a><a href="index_70.html" target = "projectFrame"><b> F </b></a><a href="index_71.html" target = "projectFrame"><b> G </b></a><a href="index_72.html" target = "projectFrame"><b> H </b></a><a href="index_73.html" target = "projectFrame"><b> I </b></a><a href="index_75.html" target = "projectFrame"><b> K </b></a><a href="index_76.html" target = "projectFrame"><b> L </b></a><a href="index_77.html" target = "projectFrame"><b> M </b></a><a href="index_78.html" target = "projectFrame"><b> N </b></a><a href="index_79.html" target = "projectFrame"><b> O </b></a><a href="index_80.html" target = "projectFrame"><b> P </b></a><a href="index_82.html" target = "projectFrame"><b> R </b></a><a href="index_83.html" target = "projectFrame"><b> S </b></a><a href="index_84.html" target = "projectFrame"><b> T </b></a><a href="index_85.html" target = "projectFrame"><b> U </b></a><a href="index_86.html" target = "projectFrame"><b> V </b></a><a href="index_87.html" target = "projectFrame"><b> W </b></a><a href="index_126.html" target = "projectFrame"><b> ~ </b></a></p>
<p><a href="index_34.html" target = "projectFrame"><b> " </b></a><a href="index_60.html" target = "projectFrame"><b> &lt; </b></a><a href="index_65.html" target = "projectFrame"><b> A </b></a><a href="index_66.html" target = "projectFrame"><b> B </b></a><a href="index_67.html" target = "projectFrame"><b> C </b></a><a href="index_68.html" target = "projectFrame"><b> D </b></a><a href="index_69.html" target = "projectFrame"><b> E </b></a><a href="index_70.html" target = "projectFrame"><b> F </b></a><a href="index_71.html" target = "projectFrame"><b> G </b></a><a href="index_72.html" target = "projectFrame"><b> H </b></a><a href="index_73.html" target = "projectFrame"><b> I </b></a><a href="index_75.html" target = "projectFrame"><b> K </b></a><a href="index_76.html" target = "projectFrame"><b> L </b></a><a href="index_77.html" target = "projectFrame"><b> M </b></a><a href="index_78.html" target = "projectFrame"><b> N </b></a><a href="index_79.html" target = "projectFrame"><b> O </b></a><a href="index_80.html" target = "projectFrame"><b> P </b></a><a href="index_81.html" target = "projectFrame"><b> Q </b></a><a href="index_82.html" target = "projectFrame"><b> R </b></a><a href="index_83.html" target = "projectFrame"><b> S </b></a><a href="index_84.html" target = "projectFrame"><b> T </b></a><a href="index_85.html" target = "projectFrame"><b> U </b></a><a href="index_86.html" target = "projectFrame"><b> V </b></a><a href="index_87.html" target = "projectFrame"><b> W </b></a><a href="index_89.html" target = "projectFrame"><b> Y </b></a><a href="index_126.html" target = "projectFrame"><b> ~ </b></a></p>
</body>
</html>

View file

@ -25,6 +25,7 @@
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128645" target = "projectFrame"><b>codegen</b></a></td><td></td><td>This package is used to organize code generation by BOUML. It is considered useless after having generated the initial code skeleton.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129413" target = "projectFrame"><b>common</b></a></td><td>src</td><td>sourcecode package<br /><br />Common library and helper classes</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128517" target = "projectFrame"><b>CommonLib</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage131077" target = "projectFrame"><b>ConfigQuery</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage129029" target = "projectFrame"><b>Controller</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage130693" target = "projectFrame"><b>controller</b></a></td><td>src</td><td>sourcecode package<br /><br />The Processing and Render Controller,<br />located within the MObject Subsystem</td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refpackage128138" target = "projectFrame"><b>design</b></a></td><td></td><td></td></tr>

View file

@ -29,6 +29,7 @@
<tr bgcolor=#f0f0f0><td><a href="class139653.html#refoperation133509"><b>currEDL</b></a></td><td><a href="class139653.html#refclass139653"><b>Session</b></a></td><td>The EDL currently in focus. In most cases, Session and EDL are almost the same, just EDL emphasizes the collection aspect. But generally (for larger editing projects) one Session can contain several EDLs, which may even be nested. At any given time, only one of these EDLs has focus and recieves the editing commands.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140165.html#refoperation134917"><b>dispatchOp</b></a></td><td><a href="class140165.html#refclass140165"><b>Visitable</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136453.html#refoperation132997"><b>enable</b></a></td><td><a href="class136453.html#refclass136453"><b>Asset</b></a></td><td>change the enabled status of this asset. Note the corresponding #isActive predicate may depend on the enablement status of parent assets as well</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140805.html#refoperation135045"><b>find</b></a></td><td><a href="class140805.html#refclass140805"><b>TypeHandler</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135429.html#refoperation131589"><b>get</b></a></td><td><a href="class135429.html#refclass135429"><b>Appconfig</b></a></td><td>access the configuation value for a given key.<br />@return empty string for unknown keys, else the corresponding configuration value</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129541.html#refoperation131205"><b>get_repr</b></a></td><td><a href="class129541.html#refclass129541"><b>Allocation</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136581.html#refoperation132485"><b>getAsset</b></a></td><td><a href="class136581.html#refclass136581"><b>AssetManager</b></a></td><td>find and return corresponging object</td></tr>
@ -48,20 +49,23 @@
<tr bgcolor=#f0f0f0><td><a href="class136453.html#refoperation132869"><b>isActive</b></a></td><td><a href="class136453.html#refclass136453"><b>Asset</b></a></td><td>weather this asset is swithced on and consequently included in the fixture and participates in rendering</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136581.html#refoperation132613"><b>known</b></a></td><td><a href="class136581.html#refclass136581"><b>AssetManager</b></a></td><td>@return true if the given id is registered in the internal asset DB</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139781.html#refoperation134021"><b>load</b></a></td><td><a href="class139781.html#refclass139781"><b>SessManager</b></a></td><td>replace the current session by a new<br />session loaded from serialized state.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140805.html#refoperation135173"><b>make</b></a></td><td><a href="class140805.html#refclass140805"><b>TypeHandler</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class131333.html#refoperation129413"><b>play</b></a></td><td><a href="class131333.html#refclass131333"><b>RenderEngine</b></a></td><td>TODO: will probably be handled differently (see Cehteh)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class136581.html#refoperation132741"><b>remove</b></a></td><td><a href="class136581.html#refclass136581"><b>AssetManager</b></a></td><td>remove the given asset &lt;i&gt;together with all its dependants&lt;/i&gt; from the internal DB</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139781.html#refoperation133893"><b>reset</b></a></td><td><a href="class139781.html#refclass139781"><b>SessManager</b></a></td><td>reset all session config and <br />start with a pristine default session.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class128645.html#refoperation128005"><b>resolve</b></a></td><td><a href="class128645.html#refclass128645"><b>Placement</b></a></td><td>create an actual (explicit) placement while trying to satisfy the network of adjacent objects and placements.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140677.html#refoperation135301"><b>resolve</b></a></td><td><a href="class140677.html#refclass140677"><b>QueryHandler</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class141189.html#refoperation135429"><b>resolve</b></a></td><td><a href="class141189.html#refclass141189"><b>QueryHandlerImpl</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class135557.html#refoperation131973"><b>rootCause</b></a></td><td><a href="class135557.html#refclass135557"><b>Error</b></a></td><td>If this exception was caused by a chain of further exceptions,<br />return the first one registered in this throw sequence.<br />This works only, if every exceptions thrown as a consequence<br />of another exception is propperly constructed by passing<br />the original exception to the constructor</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class139781.html#refoperation134149"><b>save</b></a></td><td><a href="class139781.html#refclass139781"><b>SessManager</b></a></td><td>create a complete, serialized representation<br />of the current session config and contents.<br />@todo how to serialize, prameters, return value?</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class140293.html#refoperation134405"><b>treat</b></a></td><td><a href="class140293.html#refclass140293"><b>Applicable</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134149.html#refoperation129797"><b>treat</b></a></td><td><a href="class134149.html#refclass134149"><b>BuilderTool</b></a></td><td>This operation is to be overloaded for the specific MObject subclasses to be treated.</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130565"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130437"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130309"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130693"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134405.html#refoperation130565"><b>treat</b></a></td><td><a href="class134405.html#refclass134405"><b>NodeCreatorTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation130181"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation130053"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation130181"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class134277.html#refoperation129925"><b>treat</b></a></td><td><a href="class134277.html#refclass134277"><b>SegmentationTool</b></a></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refoperation128010"><b>useFile</b></a></td><td><a href="class129333.html#refclass129333"><b>FileProvider</b></a></td><td>Announces that the application intends to use this file with mode (READ|WRITE|READWRITE)</td></tr>
<tr bgcolor=#f0f0f0><td><a href="class129333.html#refoperation128138"><b>useTemporaryStorage</b></a></td><td><a href="class129333.html#refclass129333"><b>FileProvider</b></a></td><td>Provides a pool for interminate frames</td></tr>

View file

@ -17,6 +17,7 @@
<table>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case diagram130821" target = "projectFrame"><b>backend use cases</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case diagram131717" target = "projectFrame"><b>when to query</b></a></td><td></td><td></td></tr>
</table>
</body>
</html>

View file

@ -18,8 +18,14 @@
<table>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128389" target = "projectFrame"><b>access Channel</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128133" target = "projectFrame"><b>access File</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128901" target = "projectFrame"><b>add new object to session</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case129029" target = "projectFrame"><b>ConfigQuery</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128517" target = "projectFrame"><b>create specific object</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128261" target = "projectFrame"><b>detect Channels</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128005" target = "projectFrame"><b>load Media</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128773" target = "projectFrame"><b>load object from session</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case129157" target = "projectFrame"><b>need sub object</b></a></td><td></td><td></td></tr>
<tr bgcolor=#f0f0f0><td><a href="index.html#refuse case128645" target = "projectFrame"><b>use "default" object</b></a></td><td></td><td></td></tr>
</table>
</body>
</html>

View file

@ -37,13 +37,6 @@ using util::isnil;
namespace lumiera
{
/** This internal pointer to the single instance is deliberately
* not initialized (i.e. rely on implicit initialisation to 0),
* because when static init reaches this definition, the
* Appconfig::instance() probably already has been called
* by another compilation unit. This is ugliy, but preferable
* to beeing dependant on inclusion order of headers. */
// scoped_ptr<Appconfig> Appconfig::theApp_;
#ifndef LUMIERA_VERSION
#define LUMIERA_VERSION 3++devel

View file

@ -0,0 +1,71 @@
/*
ConfigRules - interface for rule based configuration
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
#include "common/configrules.hpp"
#include "common/query/mockconfigrules.hpp"
//#include "common/util.hpp"
#include "nobugcfg.h"
namespace lumiera
{
namespace query
{
LUMIERA_ERROR_DEFINE (CAPABILITY_QUERY, "unresolvable capability query");
} // namespace query
namespace
{
/** type of the actual ConfigRules implementation to use */
singleton::UseSubclass<query::MockConfigRules> typeinfo;
}
/** Singleton factory instance, parametrized to actual impl. type. */
SingletonSub<ConfigRules> ConfigRules::instance (typeinfo);
namespace query
{
namespace // local definitions: implementing a backdoor for tests
{
string fakeBypass;
}
void setFakeBypass(string const& q) { fakeBypass = q; }
bool isFakeBypass (string const& q) { return q == fakeBypass; }
} // namespace query
} // namespace lumiera

240
src/common/configrules.hpp Normal file
View file

@ -0,0 +1,240 @@
/*
CONFIGRULES.hpp - interface for rule based configuration
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file configrules.hpp
** Interface for accessing rule based configuration.
** By using the Query template, you can pose a query in prolog syntax and get some
** existing or newly created object fulfilling the requested predicates. The actual
** implementation is hidden behind the #instance (Singleton factory). As of 1/2008,
** it is \e planned to use an embedded YAP Prolog system at some point in the future,
** for now we use a \link MockConfigRules mock implementation \endlink employing a
** preconfigured Map.
**
** Fully implementing this facility would require the participating objects to register capabilities
** they want to provide, together with functors carrying out the neccessary configuration steps.
** All details and consequences of this approach still have to be worked out...
**
** @note this is rather a scrapbook and in flux... don't take this code too literal!
**
** @see lumiera::Query
** @see mobject::session::DefsManager
** @see asset::StructFactory
**
*/
#ifndef LUMIERA_CONFIGRULES_H
#define LUMIERA_CONFIGRULES_H
#include "common/query.hpp"
#include "common/typelistutil.hpp"
#include "common/singletonsubclass.hpp"
//TODO: is it sensible to bring in the types explicitly here? (it's not necessary, but may be convenient...)
#include "proc/mobject/session/track.hpp"
#include "proc/asset/procpatt.hpp"
#include "proc/asset/pipe.hpp"
#include "proc/asset/track.hpp"
#include <string>
#include <tr1/memory>
namespace lumiera
{
using std::string;
using std::tr1::shared_ptr;
namespace query
{
// The intention is to support the following style of Prolog code
//
// resolve(O, Cap) :- find(O), capabilities(Cap).
// resolve(O, Cap) :- make(O), capabilities(Cap).
// capabilities(Q) :- call(Q).
//
// stream(T, mpeg) :- type(T, track), type(P, pipe), resolve(P, stream(P,mpeg)), place_to(P, T).
//
// The type guard is inserted auomatically, while the predicate implementations for
// find/1, make/1, stream/2, and place_to/2 are to be provided by the target types.
//
// As a example, the goal ":-retrieve(T, stream(T,mpeg))." would search a Track object, try to
// retrieve a pipe object with stream-type=mpeg and associate the track with this Pipe. The
// predicate "stream(P,mpeg)" needs to be implemented (natively) for the pipe object.
class Resolver
{
};
template
< const Symbol SYM, // Predicate symbol
typename SIG = bool(string) // Signature
>
class Pred
{
};
/**
* the "backside" interface towards the classes participating
* in the configuration system (the config system will be
* delivering instances of these classes for a given query).
* This one currently is just brainstorming. The idea is that
* a participating class would provide such and TypeHandler
* implementing the predicates which make sense for this special
* type of object. Registering such a TypeHandler should create
* the necessary handler functions to be installed into
* the Prolog system.
* @todo it can't be done exactly this way, but I leave it in
* as a reminder for later, to show the intention
*/
template<class TY>
class TypeHandler
{
static const TY NIL;
template<Symbol SYM, typename SIG>
TY find (Pred<SYM,SIG> capability);
template<Symbol SYM, typename SIG>
TY make (Pred<SYM,SIG> capability, TY& refObj =NIL);
};
/**
* the "frontside" interface: the Proc-Layer code can
* use this QueryHandler to retrieve instances of the
* type TY fulfilling the given Query. To start with,
* we use a mock implementation.
* (this code works and is already used 2/2008)
* @see lumiera::query::LookupPreconfigured
* @see lumiera::query::MockTable
*/
template<class TY>
class QueryHandler
{
protected:
virtual ~QueryHandler() { }
public:
/** try to find or create an object of type TY
* fulfilling the given query.
* @param solution object fulfilling the query. Will be bound or
* unified (in case it's already bound) with the first solution.
* @query any goals to be fulfilled by the solution.
* @return false if resolution failed. In this case, solution ptr is empty.
*/
virtual bool resolve (shared_ptr<TY>& solution, const Query<TY>& q) = 0;
};
// TODO: the Idea is to provide specialisations for the concrete types
// we want to participate in the ConfigRules system....
// Thus we get the possibility to create a specific return type,
// e.g. return a shared_ptr<Pipe> but a Placement<Track>, using the appropriate factory.
// Of course then the definitions need to be split up in separate headers.
/**
* Generic query interface for retrieving objects matching
* some capability query. To be instantiated using a typelist,
* thus inheriting from the Handler classes for each type. In
* the (future) version using YAP Prolog, this will drive the
* generation and registration of the necessary predicate
* implementations for each concrete type, using the speicalisations
* given alongside with the types. For now it just serves to generate
* the necessary resolve(Query<TY>) virtual functions (implemented
* by MockConfigRules)
*/
template<typename TYPES>
class ConfigRules
: public typelist::InstantiateForEach<TYPES, QueryHandler>
{
protected:
ConfigRules () {}
virtual ~ConfigRules() {}
public:
// TODO: find out what operations we need to support here for the »real solution« (using Prolog)
};
LUMIERA_ERROR_DECLARE (CAPABILITY_QUERY); ///< unresolvable capability query.
} // namespace query
/* ============= global configuration ==================== */
/**
* the list of all concrete types participating in the
* rule based config query system
*/
typedef lumiera::typelist::Types < mobject::session::Track
, asset::Track
, asset::Pipe
, const asset::ProcPatt
> ::List
InterfaceTypes;
/**
* user-visible Interface to the ConfigRules subsystem.
* Configured as Singleton (with hidden Implementation class)
*/
class ConfigRules
: public query::ConfigRules<InterfaceTypes>
{
public:
static SingletonSub<ConfigRules> instance;
};
namespace query
{
/** backdoor for tests: the next config query with this query string
* will magically suceed with every candidate object provided. This
* is currently necessary to get objects into the defaults manager,
* as the query system is not able to do real query resolution */
void setFakeBypass(string const& q);
bool isFakeBypass (string const& q);
} // namespace query
} // namespace lumiera
#endif

View file

@ -162,10 +162,10 @@ namespace lumiera
*/
#ifdef NOBUG_ABORT
#undef NOBUG_ABORT
#define CIN_NOBUG_LOCATION \
#define LUMIERA_NOBUG_LOCATION \
std::string (NOBUG_BASENAME(__FILE__)) +":"+ NOBUG_STRINGIZE(__LINE__) + ", function " + __func__
#define NOBUG_ABORT \
lumiera::error::assertion_terminate (CIN_NOBUG_LOCATION);
lumiera::error::assertion_terminate (LUMIERA_NOBUG_LOCATION);
#endif

View file

@ -27,6 +27,7 @@
#define LUMIERA_MULTITHREAD_H
#include "nobugcfg.h"
#include "common/util.hpp"
namespace lumiera

128
src/common/p.hpp Normal file
View file

@ -0,0 +1,128 @@
/*
P.hpp - customized shared_ptr with ordering and type relationships
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file p.hpp
** customized refcounting smart pointer.
** Template derived from std::tr1::shared_ptr adding total ordering and
** type relationships implemented by forwarding to the pointees. In all other
** respects, it should behave exactly as shared_ptr and is able to cooperate
** and share ownership with other shared_ptr instantiations.
**
** By default different instantiations of shared_ptr are completely unrelated types,
** even if using inherintance related type parameters for instantiation: a shared_ptr<Media>
** isn't some kind-of shared_ptr<Asset> -- we need to do an explicit static_ptr_cast. Another
** common problem is the definition of equality and ordering relations for shared_ptr:
** equality is based on the equality of the managed pointers, while ordering is built upon
** the ref count. While generally this may be a good compromise, in our case it hinders treating
** the smart ptrs within the application almost as if they were the objects themselfs and proved
** an obstacle for writing generic helper functions.
**
** the P template resolves these problems by implementing the ordering operators in terms of
** the corresponding operators on the pointee and by allowing to specify a base class smart-ptr
** as template parameter.
**
** @see asset.hpp
** @see customsharedptrtest.cpp
** @see orderingofassetstest.cpp
*/
#ifndef LUMIERA_P_H
#define LUMIERA_P_H
#include <tr1/memory>
namespace lumiera
{
using std::tr1::shared_ptr;
using std::tr1::weak_ptr;
/**
* customized refcounting smart pointer template, built upon
* std::tr1::shared_ptr, but forwarding type relationships and
* ordering operators to the pointee objects.
* @param TAR the visible pointee type
* @param the shared-ptr type used as implementation
* @note if the BASE smart-ptr type used as implementation
* implies another pointer type than the one used on
* the interface (=type TAR), then every access to the
* pointee causes an dynamic cast. Thus the pointee types
* need to support RTTI.
*/
template<class TAR, class BASE =shared_ptr<TAR> >
class P
: public BASE
{
public:
P ( ) : BASE() {}
template<class Y> explicit P (Y* p) : BASE(p) {}
template<class Y, class D> P (Y* p, D d) : BASE(p,d){}
P (P const& r) : BASE(r) {}
template<class Y> P (shared_ptr<Y> const& r) : BASE(r) {}
template<class Y> explicit P (weak_ptr<Y> const& wr) : BASE(wr) {}
template<class Y> explicit P (std::auto_ptr<Y> & ar) : BASE(ar) {}
P& operator= (P const& r) { BASE::operator= (r); return *this; }
template<class Y> P& operator=(shared_ptr<Y> const& sr) { BASE::operator= (sr); return *this; }
template<class Y> P& operator=(std::auto_ptr<Y> & ar) { BASE::operator= (ar); return *this; }
TAR* get() const { return dynamic_cast<TAR*> (BASE::get()); }
TAR& operator*() const { return *get(); }
TAR* operator->() const { return get(); }
void swap(P& b) { BASE::swap (b);}
private: /* === friend operators injected into enclosing namespace for ADL === */
template<typename _O_>
friend inline bool
operator== (P const& p, P<_O_> const& q) { return (p && q)? (*p == *q) : (!p && !q); }
template<typename _O_>
friend inline bool
operator!= (P const& p, P<_O_> const& q) { return (p && q)? (*p != *q) : !(!p && !q); }
template<typename _O_>
friend inline bool
operator< (P const& p, P<_O_> const& q) { return (p && q) && (*p < *q); }
template<typename _O_>
friend inline bool
operator> (P const& p, P<_O_> const& q) { return (p && q) && (*q < *p); }
template<typename _O_>
friend inline bool
operator<= (P const& p, P<_O_> const& q) { return (p && q)? (*p <= *q) : (!p && !q); }
template<typename _O_>
friend inline bool
operator>= (P const& p, P<_O_> const& q) { return (p && q)? (*p >= *q) : (!p && !q); }
};
} // namespace lumiera
#endif

150
src/common/query.cpp Normal file
View file

@ -0,0 +1,150 @@
/*
Query - interface for capability queries
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
#include "common/query.hpp"
#include "common/util.hpp"
#include "nobugcfg.h"
#include <boost/algorithm/string.hpp>
#include <boost/regex.hpp>
#include <map>
using std::map;
using boost::regex;
using boost::smatch;
using boost::regex_search;
using boost::sregex_iterator;
using util::contains;
using util::isnil;
namespace lumiera
{
namespace query
{
namespace // local definitions
{
typedef boost::function<bool(string::value_type)> ChPredicate;
ChPredicate is_alpha = boost::algorithm::is_alpha();
ChPredicate is_upper = boost::algorithm::is_upper();
} // local defs
void
normalizeID (string& id)
{
id = util::sanitize(id);
if (isnil(id) || !is_alpha (id[0]))
id.insert(0, "o");
REQUIRE (!isnil(id));
REQUIRE (is_alpha (id[0]));
char first = id[0];
if (is_upper (first))
id[0] = std::tolower (first);
}
namespace // Implementation details
{
map<Symbol, regex> regexTable;
Symbol matchArgument = "\\(\\s*([\\w_\\.\\-]+)\\s*\\),?\\s*";
regex findPredicate (string("(\\w+)")+matchArgument);
inline regex&
getTermRegex (Symbol sym)
{
if (!contains (regexTable, sym))
regexTable[sym] = regex (string(sym)+=matchArgument);
return regexTable[sym];
}
}
/** (preliminary) helper: instead of really parsing and evaluating the terms,
* just do a regular expression match to extract the literal argument
* behind the given predicate symbol. e.g calling
* queryID ("stream", "id(abc), stream(mpeg)")
* yields "mpeg"
*/
const string
extractID (Symbol sym, const string& termString)
{
smatch match;
if (regex_search (termString, match, getTermRegex (sym)))
return (match[1]);
else
return "";
}
/** (preliminary) helper: cut a term with the given symbol.
* The term is matched, removed from the original string and returned
* @note parameter termString will be modified!
*/
const string
removeTerm (Symbol sym, string& termString)
{
smatch match;
if (regex_search (termString, match, getTermRegex (sym)))
{
string res (sym); res += "("+match[1]+")";
termString.erase (match.position(), match[0].length());
return res;
}
else
return "";
}
/** @note this is a very hackish preliminary implementation.
* The regex used will flounder when applied to nested terms.
* We need a real parser for predicate logic terms (which we
* probably get for free when we embed a prolog system)...
*/
uint
countPraed (const string& q)
{
uint cnt (0);
sregex_iterator end;
for (sregex_iterator i (q.begin(),q.end(), findPredicate);
i != end; ++i)
++cnt;
return cnt;
}
} // namespace query
/** */
} // namespace lumiera

89
src/common/query.hpp Normal file
View file

@ -0,0 +1,89 @@
/*
QUERY.hpp - interface for capability queries
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef LUMIERA_QUERY_H
#define LUMIERA_QUERY_H
#include <string>
#include <typeinfo>
#include <boost/format.hpp>
namespace lumiera
{
using std::string;
using boost::format;
/* ==== comon definitions for rule based queries ==== */
typedef const char * const Symbol;
/**
* Generic query interface for retrieving objects matching
* some capability query
*/
template<class OBJ>
class Query : public std::string
{
public:
explicit Query (const string& predicate="") : string(predicate) {}
explicit Query (format& pattern) : string(str(pattern)) {}
const string asKey() const
{
return string(typeid(OBJ).name())+": "+*this;
}
operator string& () { return *this; } // TODO: needed temporarily by mockconfigrules
}; // for calling removeTerm on the string-ref....
namespace query
{
/** ensure standard format for a given id string.
* Trim, sanitize and ensure the first letter is lower case.
* @note modifies the given string ref in place
*/
void normalizeID (string& id);
/** count the top-level predicates in the query string.
* usable for ordering queries, as more predicates usually
* mean more conditions, i.e. more constriction
*/
uint countPraed (const string&);
const string extractID (Symbol, const string& termString);
const string removeTerm (Symbol, string& termString);
} // namespace query
} // namespace lumiera
#endif

View file

@ -0,0 +1,202 @@
/*
MockConfigRules - mock implementation of the config rules system
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
#include "common/query/mockconfigrules.hpp"
#include "proc/mobject/session/track.hpp"
#include "proc/asset/procpatt.hpp"
#include "proc/asset/pipe.hpp"
#include "common/util.hpp"
#include "nobugcfg.h"
using util::isnil;
namespace lumiera
{
namespace query
{
using asset::Struct;
using asset::Pipe;
using asset::PPipe;
using asset::ProcPatt;
using asset::PProcPatt;
namespace
{
typedef std::pair<const string, any> AnyPair;
/** helper to simplify creating mock table entries, wrapped correctly */
template<class TY>
AnyPair entry (const string& query, typename WrapReturn<TY>::Wrapper& obj)
{
return AnyPair ( Query<TY> (query).asKey()
, any(obj));
}
/** helper especially for creating structural assets from a capability query */
template<class STRU>
AnyPair entry_Struct(Symbol caps)
{
typedef typename WrapReturn<STRU>::Wrapper Ptr;
Query<STRU> query(caps);
Ptr obj = Struct::create (query);
return AnyPair(query.asKey(), obj);
}
/** shortcut for simply accessing a table entry */
template<class STRU, class PTAB>
any&
item (PTAB& table, const string& query)
{
return (*table)[Query<STRU>(query).asKey()];
}
}
/** hard coded answers to configuration queries.
* @note while filling the table re-entrace
* will be quite common, so the order of
* creating the objects is important.
*/
void
MockTable::fill_mock_table ()
{
INFO (config, "creating mock answers for some config queries...");
isInit_ = true; // allow re-entrance
typedef const ProcPatt cPP;
// for baiscpipetest.cpp ---------
answer_->insert (entry_Struct<cPP> ("stream(video)"));
answer_->insert (entry_Struct<cPP> ("stream(teststream)"));
item<cPP> (answer_, "stream(default)") = item<cPP> (answer_,"stream(video)"); // set up a default stream
answer_->insert (entry_Struct<Pipe> ("pipe(master), stream(video)"));
item<Pipe> (answer_, "") = item<Pipe>(answer_,"pipe(master), stream(video)");// use as default
}
/* under some circumstances we need to emulate the behaviour *
* of a real resolution engine in a more detailed manner. *
* These case are hard wired in code below */
/** special case: create a new pipe with matching pipe and stream IDs on the fly when referred... */
bool
MockTable::fabricate_matching_new_Pipe (Query<Pipe>& q, string const& pipeID, string const& streamID)
{
typedef WrapReturn<Pipe>::Wrapper Ptr;
Ptr newPipe (Struct::create (pipeID, streamID));
answer_->insert (entry<Pipe> (q, newPipe));
return true; // denotes query will now succeed...
}
/** special case: create a new pipe for a specific stream ID */
bool
MockTable::fabricate_just_new_Pipe (Query<Pipe>& q )
{
typedef WrapReturn<Pipe>::Wrapper Ptr;
Ptr newPipe (Struct::create (Query<Pipe> ("make(PP), "+q)));
answer_->insert (entry<Pipe> (q, newPipe));
return true;
}
/** special case: create/retrieve new rocessing pattern for given stream ID... */
bool
MockTable::fabricate_ProcPatt_on_demand (Query<const ProcPatt>& q, string const& streamID)
{
typedef const ProcPatt cPP;
typedef WrapReturn<cPP>::Wrapper Ptr;
Ptr newPP (Struct::create (Query<cPP> ("make(PP), "+q)));
answer_->insert (entry<cPP> (q, newPP));
return true;
}
/** for entering "valid" solutions on-the-fly from tests */
template<class TY>
bool
MockTable::set_new_mock_solution (Query<TY>& q, typename WrapReturn<TY>::Wrapper& obj)
{
answer_->erase (q.asKey());
answer_->insert (entry<TY> (q, obj));
return true;
}
// generate the necessary specialisations-----------------------------
template bool MockTable::set_new_mock_solution (Query<Pipe>&, PPipe&);
MockConfigRules::MockConfigRules ()
{
WARN (config, "using a mock implementation of the ConfigQuery interface");
}
MockTable::MockTable ()
: answer_(new Tab()),
isInit_(false)
{ }
/** this is the (preliminary/mock) implementation
* handling queries for objects of a specific type
* and with capabilities or properties defined by
* the query. The real implementation would require
* a rule based system (Ichthyo plans to use YAP Prolog),
* while this dummy implementation simply relpies based
* on a table of pre-fabricated objects. Never fails.
* @return smart ptr (or similar) holding the object,
* maybe an empty smart ptr if not found
*/
const any&
MockTable::fetch_from_table_for (const string& queryStr)
{
static const any NOTFOUND;
if (!isInit_) fill_mock_table();
Tab::iterator i = answer_->find (queryStr);
if (i == answer_->end())
return NOTFOUND;
else
return i->second;
}
} // namespace query
} // namespace lumiera

View file

@ -0,0 +1,252 @@
/*
MOCKCONFIGRULES.hpp - mock implementation of the config rules system
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file mockconfigrules.hpp
** Mock/Test/Debugging Implementation of the config rules system.
** Instead of actually parsing/analyzing/resolving queries, this implementation
** uses a Table of hard wired queries together with preconfigured object instances
** as answer values. As of 1/2008 it is used to "keep the implementation work going"
** -- later on, when we use a real Prolog interpreter, it still may be useful for
** testing and debugging.
**
** @see lumiera::Query
** @see lumiera::ConfigRules
**
*/
#ifndef LUMIERA_MOCKCONFIGRULES_H
#define LUMIERA_MOCKCONFIGRULES_H
#include "proc/mobject/session.hpp"
#include "common/configrules.hpp"
#include "common/util.hpp"
#include <boost/scoped_ptr.hpp>
#include <boost/any.hpp>
#include <string>
#include <map>
namespace lumiera
{
namespace query
{
using asset::Pipe;
using asset::ProcPatt;
using asset::PProcPatt;
using mobject::Session;
using util::isnil;
using boost::any;
using boost::any_cast;
namespace // internal details
{
/** a traits-class to define the smart-ptr to wrap the result */
template<class TY>
struct WrapReturn { typedef shared_ptr<TY> Wrapper; };
template<>
struct WrapReturn<ProcPatt> { typedef PProcPatt Wrapper; };
/** helper detecting if a query actually intended to retrieve a "default" object.
* This implementation is quite crude, of cours it would be necessary to actually
* parse and evaluate the query. @note query is modified if "default" ... */
inline bool
is_defaults_query (string& query)
{
return !isnil (removeTerm ("default", query));
}
} // details (end)
/**
* the actual table holding preconfigured answers
* packaged as boost::any objects.
*/
class MockTable : public lumiera::ConfigRules
{
typedef std::map<string,any> Tab;
typedef boost::scoped_ptr<Tab> PTab;
PTab answer_;
bool isInit_;
protected:
MockTable ();
const any& fetch_from_table_for (const string& queryStr);
// special cases....
template<class TY>
bool detect_case (typename WrapReturn<TY>::Wrapper&, Query<TY>& q);
bool fabricate_matching_new_Pipe (Query<Pipe>& q, string const& pipeID, string const& streamID);
bool fabricate_just_new_Pipe (Query<Pipe>& q);
bool fabricate_ProcPatt_on_demand (Query<const ProcPatt>& q, string const& streamID);
template<class TY>
bool set_new_mock_solution (Query<TY>& q, typename WrapReturn<TY>::Wrapper& candidate);
private:
void fill_mock_table ();
};
/**
* building block defining how to do
* the mock implementation for \e one type.
* We simply access a table holding pre-created objects.
*/
template<class TY, class BASE>
class LookupPreconfigured : public BASE
{
typedef typename WrapReturn<TY>::Wrapper Ret;
public:
/** (dummy) implementation of the QueryHandler interface */
virtual bool
resolve (Ret& solution, const Query<TY>& q)
{
const any& entry = fetch_from_table_for (q.asKey());
if (!isnil (entry))
{
const Ret& candidate (any_cast<const Ret&> (entry));
if (! solution
||(solution && solution == candidate) // simulates a real unification
)
return solution = candidate;
}
return try_special_case(solution, q);
}
private:
bool
try_special_case (Ret& solution, const Query<TY>& q)
{
if (solution && isFakeBypass(q)) // backdoor for tests
return solution;
Query<TY> newQuery = q;
if (is_defaults_query (newQuery)) // modified query..
return solution = Session::current->defaults (newQuery);
// may cause recursion
if (detect_case (solution, newQuery))
return resolve (solution, newQuery);
return solution = Ret(); // fail: return default-constructed empty smart ptr
}
};
/** Hook for treating very special cases for individual types only */
template<class TY>
inline bool
MockTable::detect_case (typename WrapReturn<TY>::Wrapper&, Query<TY>& q)
{
q.clear(); // end recursion
return false;
}
template<>
inline bool
MockTable::detect_case (WrapReturn<Pipe>::Wrapper& candidate, Query<Pipe>& q)
{
if (!isnil (extractID("make", q)))
return false; // let the query fail here,
// so the invoking factory will go ahead
// and create a new object.
const string pipeID = extractID("pipe", q);
const string streamID = extractID("stream", q);
if (candidate && pipeID == candidate->getPipeID())
return set_new_mock_solution (q, candidate); // "learn" this solution to be "valid"
if (!isnil(pipeID) && !isnil(streamID))
return fabricate_matching_new_Pipe (q, pipeID, streamID);
if (!candidate && (!isnil(streamID) || !isnil(pipeID)))
return fabricate_just_new_Pipe (q);
q.clear();
return false;
}
template<>
inline bool
MockTable::detect_case (WrapReturn<const ProcPatt>::Wrapper& candidate, Query<const ProcPatt>& q)
{
if (!isnil (extractID("make", q)))
return false; // failure triggers creation...
const string streamID = extractID("stream", q);
if (!candidate && !isnil(streamID))
return fabricate_ProcPatt_on_demand (q, streamID);
q.clear();
return false;
}
/**
* Facade: Dummy Implementation of the query interface.
* Provides an explicit implementation using hard wired
* values for some types of interest for testing and debugging.
*/
class MockConfigRules
: public typelist::InstantiateChained < InterfaceTypes
, LookupPreconfigured // building block used for each of the types
, MockTable // for implementing the base class (interface)
>
{
protected:
MockConfigRules (); ///< to be used only by the singleton factory
friend class lumiera::singleton::StaticCreate<MockConfigRules>;
virtual ~MockConfigRules() {}
public:
// TODO: implementation of any additional functions on the ConfigRules inteface goes here
};
} // namespace query
} // namespace lumiera
#endif

View file

@ -40,7 +40,6 @@ This code is heavily inspired by
#include "common/util.hpp"
#include "nobugcfg.h"
//#include <boost/bind.hpp>
namespace lumiera
@ -53,10 +52,10 @@ namespace lumiera
* @note internally uses static fields, so all functor instances share pInstance_
*/
template
< class SI, // the class to make Singleton
template <class> class Create = singleton::StaticCreate, // how to create/destroy the instance
template <class> class Life = singleton::AutoDestroy, // how to manage Singleton Lifecycle
template <class> class Threading = singleton::IgnoreThreadsafety //TODO use Multithreaded!!!
< class SI // the class of the Singleton instance
, template <class> class Create = singleton::StaticCreate // how to create/destroy the instance
, template <class> class Life = singleton::AutoDestroy // how to manage Singleton Lifecycle
, template <class> class Threading = singleton::IgnoreThreadsafety //TODO use Multithreaded!!!
>
class SingletonFactory
{

View file

@ -0,0 +1,179 @@
/*
SINGLETONSUBCLASS.hpp - variant of the singleton (factory) creating a subclass
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file singletonsubclass.hpp
** Spezialized SingletonFactory creating sublcasses of the nominal type.
** The rationale is to be able to defer the decision what type to create
** down to the point where the singleton factory is actualy created.
** Thus the code using the singleton need not know the implementation
** class, but nevertheless gets an non-virtual access function to the
** singleton instance (which can be inlined), and the compiler is
** still able to spot type errors. Maybe someone knows a less
** contrieved solution fulfilling the same criteria....?
**
** @see configrules.cpp usage example
** @see SingletonSubclass_test
*/
#ifndef LUMIERA_SINGLETONSUBCLASS_H
#define LUMIERA_SINGLETONSUBCLASS_H
#include "common/singleton.hpp"
#include <boost/scoped_ptr.hpp>
#include <typeinfo>
namespace lumiera
{
using boost::scoped_ptr;
namespace singleton
{
/**
* Helper template to use the general policy classes of the lumiera::Singleton,
* but change the way they are parametrized on-the-fly.
*/
template<template<class> class POL, class I>
struct Adapter
{
struct Link
{
virtual ~Link() {}
virtual I* create () = 0; ///< @note compiler will check the actual type is asignable...
virtual void destroy (I* pSi) = 0;
};
template<class S>
struct TypedLink : Link
{
virtual S* create () { return POL<S>::create (); } // covariance checked!
virtual void destroy (I* pSi) { POL<S>::destroy (static_cast<S*> (pSi)); }
};
struct My_scoped_ptr : scoped_ptr<Link> ///< implementation detail: defeat static initialisation
{
using scoped_ptr<Link>::get;
My_scoped_ptr() : scoped_ptr<Link> (get()? get() : 0) {} ///< bypass if already configured
};
/** we configure this link \e later, when the singleton factory
* is actually created, to point at the desired implementation subclass.
*/
static My_scoped_ptr link;
/** Forwarding Template used to configure the basic SingletonFactory */
template<class II>
struct Adapted
{
static II* create () { return link->create (); }
static void destroy (II* pSi) { link->destroy (pSi); }
};
};
template<template<class> class A, class I>
typename Adapter<A,I>::My_scoped_ptr Adapter<A,I>::link; // note: use special ctor (due to stati init order!)
/** type-information used to configure the factory instance
* with the concrete implementation type to be created. */
template<class SU>
struct UseSubclass
{ };
} // namespace singleton
/**
* Special variant of the SingletonFactory with the option of actually creating
* a subclass or wrap the product in some way. For the user code, it should behave
* exactly like the standard SingletonFactory. The configuration of the product
* actually to be created is delayed until the ctor call, so it can be hidden
* away to the implementaton of a class using the SingletonFactory.
*
* @see configrules.cpp usage example
*/
template
< class SI // the class to use as Interface for the Singleton
, template <class> class Create = singleton::StaticCreate // how to create/destroy the instance
, template <class> class Life = singleton::AutoDestroy // how to manage Singleton Lifecycle
, template <class> class Threading = singleton::IgnoreThreadsafety //TODO use Multithreaded!!!
>
class SingletonSubclassFactory
: public SingletonFactory< SI
, singleton::Adapter<Create,SI>::template Adapted
, Life
, Threading
>
{
public:
/** The singleton-factory ctor configures what concrete type to create.
* It takes type information passed as dummy parameter and installes
* a trampoline object in the static field of class Adapter to perform
* the necessary up/downcasts. This allows to use whatever policy
* class ist wanted, but parametrizes this policy template with
* the concrete type to be created. (only the "create" policy
* needs to know the actual class, because it allocates storage)
*/
template<class SU>
SingletonSubclassFactory (singleton::UseSubclass<SU>&)
{
typedef typename singleton::Adapter<Create,SI> Adapter;
typedef typename Adapter::template TypedLink<SU> TypedLink;
if (!Adapter::link)
Adapter::link.reset (new TypedLink);
#ifdef DEBUG
else
REQUIRE ( typeid(*Adapter::link) == typeid(new TypedLink),
"If using several instances of the sub-class-creating "
"singleton factory, all *must* be configured to create "
"objects of exactly the same implementation type!");
#endif
}
};
/**
* Default Singleton configuration (subclass creating factory)
* @note all Policy template parameters taking default values
*/
template <class SI>
struct SingletonSub
: public SingletonSubclassFactory<SI>
{
template<typename TY>
SingletonSub (TY ref) : SingletonSubclassFactory<SI>(ref) {}
};
} // namespace lumiera
#endif

View file

@ -85,7 +85,7 @@ namespace test
{
public:
Launch (string testID, string groups) { Suite::enroll (this,testID,groups); };
virtual auto_ptr<Test> operator() () { return auto_ptr<Test> (new TEST ); };
virtual auto_ptr<Test> operator() () { return auto_ptr<Test> (new TEST ); };
};
} // namespace test

View file

@ -1,5 +1,5 @@
/*
Suite - helper class for running collections of tests
Suite - handle cmdline for invoking Testsuite
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -45,6 +45,7 @@ namespace test
* \code
* --help
* --group <groupID>
* --describe
* \endcode
*/
TestOption::TestOption (util::Cmdline& cmdline)

147
src/common/typelistutil.hpp Normal file
View file

@ -0,0 +1,147 @@
/*
TYPELISTUTIL.hpp - metaprogramming utilities for lists-of-types
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
====================================================================
This code is heavily inspired by
The Loki Library (loki-lib/trunk/include/loki/Sequence.h)
Copyright (c) 2001 by Andrei Alexandrescu
Copyright (c) 2005 by Peter Kümmel
This Loki code accompanies the book:
Alexandrescu, Andrei. "Modern C++ Design: Generic Programming
and Design Patterns Applied".
Copyright (c) 2001. Addison-Wesley. ISBN 0201704315
Loki Copyright Notice:
Permission to use, copy, modify, distribute and sell this software for any
purpose is hereby granted without fee, provided that the above copyright
notice appear in all copies and that both that copyright notice and this
permission notice appear in supporting documentation.
The author makes no representations about the suitability of this software
for any purpose. It is provided "as is" without express or implied warranty.
*/
/** @file typelistutil.hpp
** Helpers for working with lumiera::typelist::Types (i.e. lists-of-types).
**
** @see lumiera::query::ConfigRules usage example
** @see typelist.hpp
**
*/
#ifndef LUMIERA_TYPELISTUTIL_H
#define LUMIERA_TYPELISTUTIL_H
#include "common/typelist.hpp"
namespace lumiera
{
namespace typelist
{
/**
* Apply a template to a collection of types.
* The resulting class ends up inheriting from an instantiation
* of the template for each of the types in the list. The iheritance
* graph is built in a "mixin" (multiple inheritance) style.
*/
template
< class TYPES // List of Types
, template<class> class _X_ // your-template-goes-here
, class BASE = NullType // Base class at end of chain
>
class InstantiateForEach;
template<template<class> class _X_, class BASE>
class InstantiateForEach<NullType, _X_, BASE>
: public BASE
{
public:
typedef BASE Unit;
typedef NullType Next;
};
template
< class TY, typename TYPES
, template<class> class _X_
, class BASE
>
class InstantiateForEach<Node<TY, TYPES>, _X_, BASE>
: public _X_<TY>,
public InstantiateForEach<TYPES, _X_, BASE>
{
public:
typedef _X_<TY> Unit;
typedef InstantiateForEach<TYPES,_X_> Next;
};
/**
* Build a single inheritance chain of template instantiations.
* Needs the help of the user provided Template, which now has
* to take a second parameter and use this as Base class.
* The resulting class ends up (single) inheriting from an
* instantiation of the templace for each of the types, while
* overrideing/implementing the provided base class.
*/
template
< class TYPES // List of Types
, template<class,class> class _X_ // your-template-goes-here
, class BASE = NullType // Base class at end of chain
>
class InstantiateChained;
template<template<class,class> class _X_, class BASE>
class InstantiateChained<NullType, _X_, BASE>
: public BASE
{
public:
typedef BASE Unit;
typedef NullType Next;
};
template
< class TY, typename TYPES
, template<class,class> class _X_
, class BASE
>
class InstantiateChained<Node<TY, TYPES>, _X_, BASE>
: public _X_< TY
, InstantiateChained<TYPES, _X_, BASE>
>
{
public:
typedef InstantiateChained<TYPES,_X_> Next;
typedef _X_<TY,Next> Unit;
};
} // namespace typelist
} // namespace lumiera
#endif

View file

@ -91,6 +91,14 @@ namespace util
return set.end() != set.find (val);
}
/** shortcut for string value containment test */
template <typename T>
inline bool
contains (std::string& str, const T& val)
{
return str.find (val) != std::string::npos;
}
/** shortcut for brute-force containment test
* in any sequencial container */
template <typename SEQ>
@ -116,6 +124,39 @@ namespace util
}
/** remove all elements fulfilling a given predicate
* from a (sorted) set.
* @return true if anything has been removed. */
template<class SET, typename PRD>
bool remove_if (SET& set, PRD test)
{
typedef typename SET::iterator Itor;
bool found = false;
Itor end = set.end();
Itor begin = set.begin();
Itor pos = begin;
while (pos!=end)
{
if (!test (*pos)) ++pos;
else
{
found = true;
if (pos==begin)
{
set.erase(pos);
pos = begin = set.begin();
}
else
{
set.erase(pos--);
++pos;
}
end = set.end();
} }
return found;
}
/** shortcut for operating on all elements of a container.
* Isn't this already defined somewhere? It's so obvious..
*/
@ -156,8 +197,8 @@ namespace util
"trailing Withespace \t \n" --> 'trailing_Withespace'
"with a lot \nof Whitespace" --> 'with_a_lot_of_Whitespace'
"with\"much (punctuation)[]!" --> 'withmuch_(punctuation)'
"§&Ω%€ leading garbarge" --> 'leading_garbarge'
"mixed Ω garbarge" --> 'mixed_garbarge'
"§&Ω%€ leading garbage" --> 'leading_garbage'
"mixed Ω garbage" --> 'mixed_garbage'
"Bääääh!!" --> 'Bh'
\endverbatim
*/

View file

@ -163,7 +163,7 @@ namespace asset
void
Asset::defineDependency (PAsset parent)
{
PAsset p_this (AssetManager::getPtr(*this));
PAsset p_this (AssetManager::wrap(*this));
REQUIRE (!contains (parent->dependants, p_this));
REQUIRE (!contains (this->parents, parent));
parents.push_back (parent);
@ -173,7 +173,7 @@ namespace asset
void
Asset::defineDependency (Asset& parent)
{
PAsset p_parent (AssetManager::getPtr(parent));
PAsset p_parent (AssetManager::wrap(parent));
ASSERT (p_parent);
defineDependency (p_parent);
}

View file

@ -39,7 +39,7 @@
** value. For example the asset::Media#getID returns an ID<Media>. By using the
** templated query function AssetManager#getAsset, we can get at references to the more
** specific subinterface asset::media just by using the ID value in a typesafe manner.
** This helps avoiding dynamic typing and switch-on-type, leading to much more robust,
** This helps avoiding dynamic typing and switch-on-type, leading to more robust,
** extensible and clear code.
**
** (Implementation detail: as g++ is not able to handle member function template
@ -59,13 +59,16 @@
#include "proc/asset/category.hpp"
#include "common/error.hpp"
#include "common/p.hpp"
#include <boost/type_traits/is_base_of.hpp>
#include <boost/operators.hpp>
#include <boost/utility.hpp>
#include <cstddef>
#include <string>
#include <vector>
#include <set>
#include <tr1/memory>
#include <boost/utility.hpp>
using std::string;
@ -79,6 +82,9 @@ namespace asset
using std::size_t;
using std::tr1::shared_ptr;
using std::tr1::static_pointer_cast;
using lumiera::P;
/**
@ -107,8 +113,8 @@ namespace asset
class Asset;
class AssetManager;
typedef const ID<Asset>& IDA;
typedef shared_ptr<Asset> PAsset;
typedef shared_ptr<const Asset> PcAsset;
typedef P<Asset> PAsset;
typedef P<const Asset> PcAsset;
@ -116,7 +122,7 @@ namespace asset
/**
* Superinterface describing especially bookeeping properties.
* As of 09/2008, there are four <b>Kinds</b> of Assets, each
* As of 09/2007, there are four <b>Kinds</b> of Assets, each
* comprising a sub-Interface of the Asset Interface:
* <ul><li>asset::Media representing mediafiles</li>
* <li>asset::Proc representing media data processing components (e.g. Effects)</li>
@ -127,12 +133,14 @@ namespace asset
* asset::Effect, asset::Codec, asset::Track, asset::Dataset.
* @note Assets objects have a strict unique identity and because of this are non-copyable.
* You can not create an Asset derived object without registering it with the AssetManager
* automatically. I is possible to copy the PAsset (smart pointer) though.
* automatically. It is possible to copy the PAsset (smart pointer) though.
*
* @since 09/2007
* @author Ichthyo
*/
class Asset : private boost::noncopyable
class Asset
: boost::totally_ordered1< Asset,
boost::noncopyable>
{
public:
@ -141,6 +149,7 @@ namespace asset
* sufficiently identifying any given Asset.
*/
struct Ident
: boost::totally_ordered<Ident>
{
/** element ID, comprehensible but sanitized.
* The tuple (category, name, org) is unique.
@ -170,23 +179,16 @@ namespace asset
Ident (const string& n,
const Category& cat,
const string& o,
const uint ver);
const string& o = "lumi",
const uint ver=1);
int compare (const Ident& other) const;
/** @note equality ignores version differences */
bool operator== (const Ident& other) const
{
return org == other.org
&& name == other.name
&& category == other.category;
}
bool operator!= (const Ident& other) const
{
return !operator==(other);
}
int compare (const Ident& other) const;
bool operator== (const Ident& oi) const { return compare (oi) ==0; }
bool operator< (const Ident& oi) const { return compare (oi) < 0; }
operator string () const;
};
@ -196,11 +198,16 @@ namespace asset
public:
const Ident ident; ///< Asset identification tuple
virtual const ID<Asset>& getID() const { return id; }
virtual const ID<Asset>& getID() const { return id; }
bool operator== (const Asset& oa) const { return ident == oa.ident; }
bool operator< (const Asset& oa) const { return ident < oa.ident; }
virtual operator string () const;
protected:
const ID<Asset> id; ///< Asset primary key.
@ -290,25 +297,43 @@ namespace asset
};
/** ordering of Asset smart ptrs based on Ident tuple.
* @todo currently supporting only smart_ptr<Asset>. */
inline bool operator== (const PAsset& a1, const PAsset& a2) { return a1 && a2 && ( 0==a1->ident.compare(a2->ident));}
inline bool operator< (const PAsset& a1, const PAsset& a2) { return a1 && a2 && (-1==a1->ident.compare(a2->ident));}
inline bool operator> (const PAsset& a1, const PAsset& a2) { return a2 < a1; }
inline bool operator>= (const PAsset& a1, const PAsset& a2) { return !(a1 < a2); }
inline bool operator<= (const PAsset& a1, const PAsset& a2) { return !(a1 > a2); }
inline bool operator!= (const PAsset& a1, const PAsset& a2) { return !(a1== a2); }
/** ordering of Asset Ident tuples.
* @note version is irrelevant */
inline int Asset::Ident::compare (const Asset::Ident& oi) const
/* ====== ordering of Assets and Asset-Pointers ====== */
/** ordering of Assets is based on the ordering
* of Ident tuples, which are supposed to be unique.
* By using our customized lumiera::P as smart ptr,
* comparison on P<Asset> ptrs will be automatically
* forwarded to the Asset comparison operators.
* @note version info is irrelevant */
inline int
Asset::Ident::compare (const Asset::Ident& oi) const
{
int res;
if (0 != (res=category.compare (oi.category))) return res;
if (0 != (res=org.compare (oi.org))) return res;
return name.compare (oi.name);
}
/** promote subtype-ptr to PAsset, e.g. for comparing */
template<class A>
inline const PcAsset
pAsset (const shared_ptr<A>& subPtr)
{
return static_pointer_cast<const Asset,A> (subPtr);
}
/** type trait for detecting a shared-ptr-to-asset */
template <class X>
struct is_pAsset : boost::false_type {};
template <class A>
struct is_pAsset<shared_ptr<A> >
: boost::is_base_of<Asset, A> {};
/** convienient for debugging */
inline string str (const PcAsset& a)

View file

@ -21,9 +21,18 @@
*/
/** @file buildinstruct.hpp
** Helper classes used by asset::ProcPatt to represent the processing informations.
** Consider these classes as owned by ProcPatt. Non-inline functions go to procpatt.cpp
**
*/
#ifndef ASSET_BUILDINSTRUCT_H
#define ASSET_BUILDINSTRUCT_H
#include <boost/variant.hpp>
#include <string>
using std::string;
@ -36,36 +45,74 @@ namespace asset
class Proc;
class ProcPatt;
typedef shared_ptr<const asset::Proc> PProc;
typedef shared_ptr<const asset::ProcPatt> PProcPatt;
/**
* (Interface) building instructions to be executed by the Builder
* on the render node network under construction.
*/
class BuildInstruct
static Symbol CURRENT = "current";
struct DoAttach
{
};
class DoRecurse : public BuildInstruct
{
protected:
const ProcPatt* subPattern;
};
class DoAttach : public BuildInstruct
{
public:
const Proc* nodes;
vector<PProc> nodes;
/** identifying the point where the nodes should be attached */
const string point;
string point;
DoAttach (Symbol where = CURRENT)
: point(where)
{ }
DoAttach (PProc& node, Symbol where = CURRENT)
: point(where)
{
nodes.push_back(node);
}
};
struct DoRecurse
{
PProcPatt subPattern_;
explicit DoRecurse (PProcPatt& pattern) : subPattern_(pattern) {}
};
class DoConditional
{
// How to do this? we need some context to test the condition...
};
typedef boost::variant< DoAttach, DoRecurse, DoConditional > InstructEntry;
/**
* (Interface) building instructions to be executed by the Builder
* on the render node network under construction. The purpose of this
* "micro language" is to be able to store in the configuration or session
* how certain parts of the model should be assembled. One important example
* is how to build a source reading chain to read and decode frames from a
* media file. Another example being a global audio Pipe, comprised of an
* EQ plugin, a fader and a panner.
* \par
* Build instructions are tightliy coupled to asset::ProcPatt and always
* created from there.
* @see ProcPatt::attach
* @see ProcPatt::operator+=
*
*/
struct BuildInstruct
: public InstructEntry
{
template<typename T>
BuildInstruct (T& instr) : InstructEntry(instr) {}
};
} // namespace asset
#endif

View file

@ -85,29 +85,13 @@ namespace asset
/** in spite of asset::Clip being a concrete subclass (and not an asset subinterface),
* we need to create the following explicit specialisation for asset::Clip#getClipAsset.
* Basically, it's a "shared-ptr-from-this"-function.
*/
template<>
shared_ptr<Clip>
AssetManager::getPtr (const Clip& asset)
{
ENSURE (instance().known(asset.id),
"unregistered asset instance encountered.");
return static_pointer_cast<Clip,Asset>
(instance().getAsset (asset.id));
}
/** return this wrapped into a shared ptr,
* because it's already the desired asset::Clip
*/
Media::PClip
Clip::getClipAsset ()
{
return AssetManager::getPtr(*this);
return AssetManager::wrap (*this);
}

View file

@ -28,6 +28,7 @@
#include "proc/asset.hpp"
#include "common/error.hpp"
#include <tr1/memory>
#include <tr1/unordered_map>
#include <boost/utility.hpp>
@ -92,9 +93,9 @@ namespace asset
public:
template<class KIND>
void put (ID<KIND> hash, shared_ptr<KIND>& ptr) { table[hash] = static_pointer_cast (ptr); }
void put (ID<Asset> hash, PAsset& ptr) { table[hash] = ptr; }
bool del (ID<Asset> hash) { return table.erase (hash); }
void put (ID<KIND> hash, P<KIND>& ptr) { table[hash] = static_pointer_cast (ptr); }
void put (ID<Asset> hash, PAsset& ptr) { table[hash] = ptr; }
bool del (ID<Asset> hash) { return table.erase (hash); }
template<class KIND>
shared_ptr<KIND>
@ -110,7 +111,7 @@ namespace asset
* As the destructor of DB needs to call clear(), this
* could result in segfaults. This doesn't seem to be
* a problem, though, because we register and process
* \i all assets and the net effect is just breaking
* \e all assets and the net effect is just breaking
* any cyclic dependencies)
*/
void
@ -118,8 +119,8 @@ namespace asset
{
try
{
IdHashtable::const_iterator i = table.begin();
IdHashtable::const_iterator e = table.end();
IdHashtable::iterator i = table.begin();
IdHashtable::iterator e = table.end();
for ( ; i!=e ; ++i )
i->second->dependants.clear();

View file

@ -231,7 +231,7 @@ namespace asset
,LUMIERA_ERROR_PART_OF_COMPOUND
);
asset::Clip* pC = new asset::Clip (mediaref);
return AssetManager::instance().getPtr (*pC);
return AssetManager::instance().wrap (*pC);
}
LUMIERA_ERROR_DEFINE (PART_OF_COMPOUND, "part of compound used as toplevel element");

69
src/proc/asset/pipe.cpp Normal file
View file

@ -0,0 +1,69 @@
/*
Pipe - structural asset denoting a processing pipe generating media output
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
#include "proc/asset/pipe.hpp"
#include "common/util.hpp"
using util::isnil;
namespace asset
{
/** */
Pipe::Pipe ( const Asset::Ident& idi
, PProcPatt& wiring
, const string& pipeID
, wstring shortName
, wstring longName
)
: Struct (idi),
pipeID_ (pipeID),
wiringTemplate(wiring),
shortDesc (shortName),
longDesc (longName)
{
REQUIRE (!isnil (pipeID));
if (isnil (shortDesc))
shortDesc = wstring (pipeID.begin(), pipeID.end());
}
PPipe
Pipe::query (string properties)
{
return Struct::create (Query<Pipe> (properties));
}
void
Pipe::switchProcPatt (PProcPatt& another)
{
wiringTemplate = another;
TODO ("trigger rebuild fixture");
}
} // namespace asset

95
src/proc/asset/pipe.hpp Normal file
View file

@ -0,0 +1,95 @@
/*
PIPE.hpp - structural asset denoting a processing pipe generating media output
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef ASSET_PIPE_H
#define ASSET_PIPE_H
#include "proc/asset/struct.hpp"
#include "proc/asset/procpatt.hpp"
namespace asset
{
class Pipe;
typedef shared_ptr<Pipe> PPipe;
template<>
class ID<Pipe> : public ID<Struct>
{
public:
ID (size_t id);
ID (const Pipe&);
};
/**
* structural asset corresponding to some
* processing pipe for generating media output
*/
class Pipe : public Struct
{
const string pipeID_;
PProcPatt wiringTemplate;
public:
wstring shortDesc;
wstring longDesc;
virtual const ID<Pipe>& getID() const ///< @return ID typed to asset::Pipe
{
return static_cast<const ID<Pipe>& > (Asset::getID());
}
protected:
Pipe (const Asset::Ident&, PProcPatt& wiring, const string& pipeID, wstring shortName =wstring(), wstring longName =wstring()) ;
friend class StructFactory;
friend class StructFactoryImpl;
public:
const string& getPipeID() const { return pipeID_; }
const PProcPatt& getProcPatt() const { return wiringTemplate; }
/** use another wiring template. Triggers complete rebuild of the render engine. */
void switchProcPatt (PProcPatt& another);
/** convienience shortcut for retrieving default configured pipes */
static PPipe query (string properties) ;
};
// catch up with postponed definition of ID<Struct> ctors...
//
inline ID<Pipe>::ID(size_t id) : ID<Struct> (id) {};
inline ID<Pipe>::ID(const Pipe& pipe) : ID<Struct> (pipe.getID()) {};
} // namespace asset
#endif

View file

@ -46,6 +46,9 @@ namespace asset
class Proc;
class ProcFactory;
typedef shared_ptr<const Proc> PProc;
template<>
class ID<Proc> : public ID<Asset>

View file

@ -22,13 +22,98 @@
#include "proc/asset/procpatt.hpp"
#include "proc/asset/proc.hpp"
#include "proc/assetmanager.hpp"
#include "proc/asset/buildinstruct.hpp"
#include "common/util.hpp"
using util::isnil;
namespace asset
{
/** */
/** new processing pattern with empty instruction list.
* @todo preliminary implementation, storing the capabilities
* in the asset name field. We can do better, when
* it's clear what capabilities we need
*/
ProcPatt::ProcPatt (const Asset::Ident& idi)
: Struct (idi),
instructions_()
{ }
/** @internal used for creating a clone copy */
ProcPatt::ProcPatt (const Asset::Ident& idi, const InstructionSequence& instru)
: Struct (idi),
instructions_(instru)
{
TODO ("verify building instructions, maybe preprocess...");
}
/** create a new ProcPatt asset as a literal copy
* of this one. The new ProcPatt can then be customized
* independently of the original one. This allows using
* some ProcPatt as a template for creating more
* spezialized patterns.
*/
shared_ptr<ProcPatt>
ProcPatt::newCopy (string newID) const
{
TODO ("implement the Pattern-ID within the propDescriptor!");
TODO ("implement a consitent struct asset naming scheme at one central location!!!!!");
const Asset::Ident newIdi ( this->ident.name+".X"
, this->ident.category
);
ProcPatt* pP = new ProcPatt (newIdi, this->instructions_);
return AssetManager::instance().wrap (*pP);
}
/** extend the processing instructions to add some Effect
* @param where denotes the insertion point where to attach the Effect
* @param node prototype of the Effect to be inserted when building.
*/
ProcPatt&
ProcPatt::attach(Symbol where, PProc& node)
{
DoAttach *last (0);
if ( !isnil (instructions_)
&& (last = boost::get<DoAttach> (&(instructions_.back())))
&& last->point==where
)
// instead of adding a new build instruct entry,
// we can extend the list in the last "DoAttach" entry.
last->nodes.push_back(node);
else
{
DoAttach entry(node, where);
instructions_.push_back(BuildInstruct(entry));
}
TODO ("declare dependency??");
return *this;
}
/** extend the processing instructions by reference to another
* ProcPatt, which will be "executed" at this point while building.
* This allowes for using simple PorcPatt instances as building blocks
* to define more complicated patterns.
*/
ProcPatt&
ProcPatt::operator+= (PProcPatt& toReuse)
{
DoRecurse entry(toReuse);
instructions_.push_back(BuildInstruct (entry));
TODO ("declare dependency??");
return *this;
}
} // namespace asset

View file

@ -24,6 +24,7 @@
#ifndef ASSET_PROCPATT_H
#define ASSET_PROCPATT_H
#include "common/query.hpp"
#include "proc/asset/struct.hpp"
#include <vector>
@ -34,22 +35,41 @@ using std::vector;
namespace asset
{
class BuildInstruct;
using lumiera::Symbol;
class Proc;
class ProcPatt;
class BuildInstruct;
typedef shared_ptr<const asset::Proc> PProc;
typedef shared_ptr<const asset::ProcPatt> PProcPatt;
typedef vector<BuildInstruct> InstructionSequence;
/**
* special type of structural Asset
* "Processing Pattern" is a structural Asset
* representing information how to build some part
* of the render engine's processing nodes network.
*/
class ProcPatt : public Struct
{
InstructionSequence instructions_;
ProcPatt (const Asset::Ident&, const InstructionSequence&);
protected:
const vector<BuildInstruct> instructions;
explicit ProcPatt (const Asset::Ident& idi);
friend class StructFactoryImpl;
public:
shared_ptr<ProcPatt> newCopy (string newID) const;
ProcPatt& attach (Symbol where, PProc& node);
ProcPatt& operator+= (PProcPatt& toReuse);
};
typedef shared_ptr<const asset::ProcPatt> PProcPatt;
} // namespace asset

View file

@ -23,37 +23,133 @@
#include "proc/assetmanager.hpp"
#include "proc/asset/struct.hpp"
#include "proc/asset/procpatt.hpp"
#include "proc/asset/track.hpp"
#include "proc/asset/pipe.hpp"
#include "common/configrules.hpp"
#include "proc/asset/structfactoryimpl.hpp"
#include "common/util.hpp"
#include "nobugcfg.h"
#include <boost/format.hpp>
using boost::format;
using lumiera::Symbol;
using lumiera::query::normalizeID;
using lumiera::query::QueryHandler;
using lumiera::ConfigRules;
using util::contains;
namespace asset
{
namespace // Implementation details
/****** NOTE: not really implemented yet. What follows is partially a hack to build simple tests *******/
/** query the currently defined properties of this
structural asset for a stream-ID predicate */
const string
Struct::queryStreamID() const
{
/** helper: .....*/
}
return lumiera::query::extractID ("stream", this->ident.name);
}
/** query the currently defined properties of this
structural asset for a stream-ID predicate */
const string
Struct::queryPipeID() const
{
return lumiera::query::extractID ("pipe", this->ident.name);
}
StructFactory Struct::create; ///< storage for the static StructFactory instance
/** storage for the static StructFactory instance */
StructFactory Struct::create;
/** using private implementation detail class */
StructFactory::StructFactory ()
: impl_(new StructFactoryImpl(*this))
{ }
/** Factory method for Structural Asset instances. ....
* @todo actually define
/** Factory method for Structural Asset instances.
* First tries to relove the asset by issuing an capability query.
* If unsuccessfull, use some internally specialized ctor call.
* @todo work out the struct asset naming scheme!
* @return an Struct smart ptr linked to the internally registered smart ptr
* created as a side effect of calling the concrete Struct subclass ctor.
*/
StructFactory::PType
StructFactory::operator() (Asset::Ident& key) ////TODO
template<class STRU>
shared_ptr<STRU>
StructFactory::operator() (const Query<STRU>& capabilities)
{
UNIMPLEMENTED ("Struct-Factory");
shared_ptr<STRU> res;
QueryHandler<STRU>& typeHandler = ConfigRules::instance();
typeHandler.resolve (res, capabilities);
if (res)
return res;
// create new one, since the
// ConfigQuery didn't yield any result
STRU* pS = impl_->fabricate(capabilities);
return AssetManager::instance().wrap (*pS);
}
/** Factory method for creating Pipes explicitly.
* Normalizes pipe- and streamID, then retrieves the
* default processing pattern (ProcPatt) for this streamID.
* The Pipe ctor will fill out the shortDesc and longDesc
* automatically, based on pipeID and streamID (and they
* are editable anyways)
* @see ProcPatt
* @see DefaultsManager
*/
shared_ptr<Pipe>
StructFactory::operator() (string pipeID, string streamID)
{
normalizeID (pipeID);
normalizeID (streamID);
static format descriptor("pipe(%s), stream(%s).");
Pipe* pP = impl_->fabricate (Query<Pipe> (descriptor % pipeID % streamID));
return AssetManager::instance().wrap (*pP);
}
} // namespace asset
/**************************************************/
/* explicit instantiations of the factory methods */
/**************************************************/
#include "proc/asset/struct.hpp"
#include "proc/asset/procpatt.hpp"
#include "proc/asset/track.hpp"
#include "proc/asset/pipe.hpp"
namespace asset
{
template shared_ptr<Pipe> StructFactory::operator() (const Query<Pipe>& query);
template shared_ptr<Track> StructFactory::operator() (const Query<Track>& query);
template PProcPatt StructFactory::operator() (const Query<const ProcPatt>& query);
} // namespace asset

View file

@ -38,15 +38,26 @@
#define ASSET_STRUCT_H
#include "proc/asset.hpp"
#include "common/query.hpp"
#include "common/factory.hpp"
#include "common/singleton.hpp"
#include <boost/scoped_ptr.hpp>
#include <string>
namespace asset
{
using std::string;
using std::wstring;
using boost::scoped_ptr;
using lumiera::Query;
class Struct;
class StructFactory;
class StructFactoryImpl;
class Pipe;
template<>
@ -73,8 +84,12 @@ namespace asset
return static_cast<const ID<Struct>& > (Asset::getID());
}
const string queryStreamID() const;
const string queryPipeID() const;
protected:
Struct (const Asset::Ident& idi) : Asset(idi) {} //////////////TODO
Struct (const Asset::Ident& idi) : Asset(idi) {}
friend class StructFactory;
};
@ -88,16 +103,28 @@ namespace asset
/**
* Factory specialized for createing Structural Asset objects.
*/
class StructFactory : public lumiera::Factory<asset::Struct>
{
scoped_ptr<StructFactoryImpl> impl_;
protected:
StructFactory ();
friend class Struct;
public:
typedef shared_ptr<asset::Struct> PType;
PType operator() (Asset::Ident& key); ////////////TODO define actual operation
template<class STRU>
shared_ptr<STRU> operator() (const Query<STRU>& query); ////////////TODO actually do something sensible here
shared_ptr<Pipe> operator() (string pipeID, string streamID);
};

View file

@ -0,0 +1,183 @@
/*
STRUCTFACTORYIMPL.hpp - crating structural assets (impl details)
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file structfactoryimpl.hpp
** Private implementation details of creating various structural assets.
** @internal to be used by struct.cpp
**
** @see ConfigQuery
**
*/
#ifndef ASSET_STRUCTFACTORYIMPL_H
#define ASSET_STRUCTFACTORYIMPL_H
#include "proc/mobject/session.hpp"
#include "common/configrules.hpp"
#include "common/error.hpp"
#include "common/util.hpp"
#include <boost/format.hpp>
using boost::format;
using mobject::Session;
using util::isnil;
using util::contains;
using asset::Query;
using lumiera::query::LUMIERA_ERROR_CAPABILITY_QUERY;
using lumiera::query::extractID;
namespace asset
{
template<class STRU>
struct Traits
{
static Symbol namePrefix;
static Symbol catFolder;
static Symbol idSymbol;
};
template<> Symbol Traits<Track>::namePrefix = "track";
template<> Symbol Traits<Track>::catFolder = "tracks";
template<> Symbol Traits<Track>::idSymbol = "track";
template<> Symbol Traits<Pipe>::namePrefix = "pipe";
template<> Symbol Traits<Pipe>::catFolder = "pipes";
template<> Symbol Traits<Pipe>::idSymbol = "pipe";
template<> Symbol Traits<const ProcPatt>::namePrefix = "patt";
template<> Symbol Traits<const ProcPatt>::catFolder = "build-templates";
template<> Symbol Traits<const ProcPatt>::idSymbol = "procPatt";
/**
* Implementation deatils, esp. concerning how configuration
* queries are resolved and when to create new objects automatically.
* @todo better use a general struct traits class, esp.for creating the Ident
*/
class StructFactoryImpl
{
/** @internal derive a sensible asset ident tuple when creating
* structural asset instances based on a capability query
*/
template<class STRU>
const Asset::Ident
createIdent (const Query<STRU>& query)
{
string name (query);
string nameID = extractID (Traits<STRU>::idSymbol, query);
if (isnil (nameID))
{
// no name-ID contained in the query...
// so we'll create a new one
static int i=0;
static format namePattern ("%s.%d");
static format predPattern ("%s(%s), ");
nameID = str(namePattern % Traits<STRU>::namePrefix % (++i) );
name.insert(0,
str(predPattern % Traits<STRU>::idSymbol % nameID ));
}
ENSURE (!isnil (name));
ENSURE (!isnil (nameID));
ENSURE (contains (name, nameID));
Category cat (STRUCT, Traits<STRU>::catFolder);
return Asset::Ident (name, cat );
}
/** used for issuing recursive create calls to top level */
StructFactory& recursive_create_;
public:
StructFactoryImpl (StructFactory& interface)
: recursive_create_(interface)
{ }
/** make a new structural asset instance.
* default/fallback impl. throws.
*/
template<class STRU>
STRU* fabricate (const Query<STRU>& caps)
{
throw lumiera::error::Config ( str(format("The following Query could not be resolved: %s.") % caps.asKey())
, LUMIERA_ERROR_CAPABILITY_QUERY );
}
};
/* ============= specialisations =========================== */
template<>
Track*
StructFactoryImpl::fabricate (const Query<Track>& caps)
{
TODO ("actually extract properties/capabilities from the query...");
TODO ("make sure AssetManager detects dublicates (currently 4/08 it doesn't)");
return new Track (createIdent (caps));
}
template<>
const ProcPatt*
StructFactoryImpl::fabricate (const Query<const ProcPatt>& caps)
{
TODO ("actually extract properties/capabilities from the query...");
return new ProcPatt (createIdent (caps));
}
template<>
Pipe*
StructFactoryImpl::fabricate (const Query<Pipe>& caps)
{
const Asset::Ident idi (createIdent (caps));
string pipeID = extractID ("pipe", idi.name);
string streamID = extractID ("stream", caps);
if (isnil (streamID)) streamID = "default";
PProcPatt processingPattern = Session::current->defaults (Query<const ProcPatt>("stream("+streamID+")"));
return new Pipe( idi
, processingPattern
, pipeID
);
}
} // namespace asset
#endif

View file

@ -26,8 +26,12 @@
namespace asset
{
/** */
/** @todo work out the details of track assets */
Track::Track (const Asset::Ident& idi)
: Struct (idi)
{
}
} // namespace asset

View file

@ -1,5 +1,5 @@
/*
TRACK.hpp - structural asset holding the configuration of a track in the EDL
TRACK.hpp - structural asset used as global track identifier
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -33,13 +33,23 @@ namespace asset
/**
* Structural Asset holding the configuration of a track in the EDL
* Structural Asset using as a global identifier for placing
* some object onto a given track. Not to be confused with the "track-MO":
* To actually use a track within an EDL, we need to attach a
* Placement<mobject::session::Track> to the tree-of-tracks of this EDL.
* Thus, we have one global track-identifier (this class here), but
* maybe several instances (track-MO) within various EDLs
*/
class Track : public Struct
{
protected:
Track (const Asset::Ident& idi);
friend class StructFactoryImpl;
};
typedef shared_ptr<const Track> PTrack;
} // namespace asset

View file

@ -32,7 +32,7 @@ namespace asset
{
const lumiera::Time DUMMY_TIME (25); ///< @todo solve konfig management
const lumiera::Time DUMMY_TIME (25); ///< @todo solve config management
/**
* Placeholder Asset for unknown or unavailable media source.

View file

@ -112,14 +112,13 @@ namespace asset
AssetManager::reg (KIND* obj, const Asset::Ident& idi)
throw(lumiera::error::Invalid)
{
typedef shared_ptr<KIND> PType;
AssetManager& _aMang (AssetManager::instance());
TODO ("check validity of Ident Category");
ID<KIND> asset_id (getID (idi));
Thread::Lock<DB> guard SIDEEFFECT;
TODO ("handle duplicate Registrations");
PType smart_ptr (obj, &destroy);
P<KIND> smart_ptr (obj, &destroy);
_aMang.registry.put (asset_id, smart_ptr);
return asset_id;
@ -152,7 +151,7 @@ namespace asset
*/
template<class KIND>
shared_ptr<KIND>
AssetManager::getPtr (const KIND& asset)
AssetManager::wrap (const KIND& asset)
{
ENSURE (instance().known(asset.id),
"unregistered asset instance encountered.");
@ -234,7 +233,10 @@ namespace asset
#include "proc/asset/clip.hpp"
#include "proc/asset/proc.hpp"
#include "proc/asset/struct.hpp"
#include "proc/asset/track.hpp"
#include "proc/asset/pipe.hpp"
#include "proc/asset/meta.hpp"
#include "proc/asset/procpatt.hpp"
namespace asset
@ -249,9 +251,12 @@ namespace asset
template shared_ptr<Struct> AssetManager::getAsset (const ID<Struct>& id) throw(lumiera::error::Invalid);
template shared_ptr<Meta> AssetManager::getAsset (const ID<Meta>& id) throw(lumiera::error::Invalid);
template shared_ptr<Asset> AssetManager::getPtr (const Asset& asset);
template shared_ptr<Media> AssetManager::getPtr (const Media& asset);
template shared_ptr<Clip> AssetManager::getPtr (const Clip& asset);
template shared_ptr<Asset> AssetManager::wrap (const Asset& asset);
template shared_ptr<Media> AssetManager::wrap (const Media& asset);
template shared_ptr<Clip> AssetManager::wrap (const Clip& asset);
template shared_ptr<Track> AssetManager::wrap (const Track& asset);
template shared_ptr<Pipe> AssetManager::wrap (const Pipe& asset);
template shared_ptr<ProcPatt> AssetManager::wrap (const ProcPatt& asset);
} // namespace asset

View file

@ -73,7 +73,7 @@ namespace asset
/** retrieve the registerd shared_ptr for any asset */
template<class KIND>
static shared_ptr<KIND> getPtr (const KIND& asset);
static shared_ptr<KIND> wrap (const KIND& asset);
/** find and return corresponging object */
template<class KIND>

View file

@ -48,12 +48,12 @@ namespace mobject
{
public:
const Time time;
const Track track;
const Pipe pipe;
typedef std::pair<Time,Track> SolutionData; //TODO (ichthyo consideres better passing of solution by subclass)
typedef std::pair<Time,Pipe> SolutionData; //TODO (ichthyo consideres better passing of solution by subclass)
/** no need to resolve any further, as this ExplicitPlacement
* already \i is the result of a resolve()-call.
* already \e is the result of a resolve()-call.
*/
virtual
ExplicitPlacement resolve () const
@ -70,7 +70,7 @@ namespace mobject
*/
ExplicitPlacement (const Placement<MObject>& base, const SolutionData found)
: Placement<MObject>(base),
time(found.first), track(found.second)
time(found.first), pipe(found.second)
{ };
friend ExplicitPlacement Placement<MObject>::resolve () const;

View file

@ -58,10 +58,9 @@
#define MOBJECT_PLACEMENT_H
#include "pre.hpp"
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/session/locatingpin.hpp"
#include "proc/mobject/session/track.hpp"
#include "proc/asset/pipe.hpp"
#include <tr1/memory>
using std::tr1::shared_ptr;
@ -87,7 +86,8 @@ namespace mobject
{
protected:
typedef lumiera::Time Time;
typedef session::Track* Track;
typedef asset::shared_ptr<asset::Pipe> Pipe;
public:

View file

@ -34,6 +34,7 @@
#define MOBJECT_SESSION_H
#include "proc/mobject/placement.hpp"
#include "proc/mobject/session/defsmanager.hpp"
#include "common/singleton.hpp"
#include <boost/utility.hpp>
@ -78,11 +79,12 @@ namespace mobject
class Session : private boost::noncopyable
{
protected:
Session () throw();
Session (session::DefsManager&) throw();
virtual ~Session () = 0;
public:
static session::SessManager& current;
session::DefsManager& defaults;
virtual bool isValid () = 0;
virtual void add (PMO& placement) = 0;
@ -139,6 +141,10 @@ namespace mobject
virtual ~SessManager() {};
};
LUMIERA_ERROR_DECLARE (CREATE_SESSION); ///< unable to create basic session.
} // namespace mobject::session
} // namespace mobject

View file

@ -66,14 +66,14 @@ namespace mobject
PMedia
Clip::getMedia () const
{
return asset::AssetManager::getPtr (mediaDef_);
return asset::AssetManager::wrap (mediaDef_);
}
PClipAsset
Clip::findClipAsset () const
{
return asset::AssetManager::getPtr (clipDef_);
return asset::AssetManager::wrap (clipDef_);
}

View file

@ -60,6 +60,12 @@ namespace mobject
/** startpos in source */
Time start_;
/** @todo using a mere ref here is against the scheme and only
done as temporal solution, until we work out how to handle
multichannel clips. It should be a smart pointer of some kind
and the unlink() function of the asset should take it into
account when breaking circular references.
*/
const Media & mediaDef_;
const asset::Clip & clipDef_;

View file

@ -1,5 +1,5 @@
/*
OutPort - structural asset corresponding to some port generating media output
Constraint - LocatingPin representing an mandatory directive
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
@ -21,11 +21,17 @@
* *****************************************************/
#include "proc/asset/outport.hpp"
#include "proc/mobject/session/constraint.hpp"
namespace asset
namespace mobject
{
namespace session
{
/** */
} // namespace asset
} // namespace mobject::session
} // namespace mobject

View file

@ -0,0 +1,47 @@
/*
CONSTRAINT.hpp - LocatingPin representing an mandatory directive
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef MOBJECT_SESSION_CONSTRAINT_H
#define MOBJECT_SESSION_CONSTRAINT_H
#include "proc/mobject/session/allocation.hpp"
namespace mobject
{
namespace session
{
/**
* LocatingPin representing an directive by the user
* that must not be violated
*/
class Constraint : public Allocation
{};
} // namespace mobject::session
} // namespace mobject
#endif

View file

@ -0,0 +1,165 @@
/*
DefsManager - access to preconfigured default objects and definitions
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
#include "proc/mobject/session/defsmanager.hpp"
#include "proc/mobject/session/defsregistry.hpp"
#include "common/configrules.hpp"
#include "common/error.hpp"
#include <boost/format.hpp>
using boost::format;
using lumiera::ConfigRules;
using lumiera::query::QueryHandler;
using lumiera::query::LUMIERA_ERROR_CAPABILITY_QUERY;
namespace mobject
{
namespace session
{
using std::tr1::shared_ptr;
/** initialize the most basic internal defaults. */
DefsManager::DefsManager () throw()
: defsRegistry(new DefsRegistry)
{
TODO ("setup basic defaults of the session");
}
template<class TAR>
shared_ptr<TAR>
DefsManager::search (const Query<TAR>& capabilities)
{
shared_ptr<TAR> res;
QueryHandler<TAR>& typeHandler = ConfigRules::instance();
for (DefsRegistry::Iter<TAR> i = defsRegistry->candidates(capabilities);
res = *i ; ++i )
{
typeHandler.resolve (res, capabilities);
if (res)
return res;
}
return res; // "no solution found"
}
template<class TAR>
shared_ptr<TAR>
DefsManager::create (const Query<TAR>& capabilities)
{
shared_ptr<TAR> res;
QueryHandler<TAR>& typeHandler = ConfigRules::instance();
typeHandler.resolve (res, capabilities);
if (res)
defsRegistry->put (res, capabilities);
return res;
}
template<class TAR>
bool
DefsManager::define (const shared_ptr<TAR>& defaultObj, const Query<TAR>& capabilities)
{
shared_ptr<TAR> candidate (defaultObj);
QueryHandler<TAR>& typeHandler = ConfigRules::instance();
typeHandler.resolve (candidate, capabilities);
if (!candidate)
return false;
else
return defsRegistry->put (candidate, capabilities);
}
template<class TAR>
bool
DefsManager::forget (const shared_ptr<TAR>& defaultObj)
{
return defsRegistry->forget (defaultObj);
}
template<class TAR>
shared_ptr<TAR>
DefsManager::operator() (const Query<TAR>& capabilities)
{
shared_ptr<TAR> res (search (capabilities));
if (res)
return res;
else
res = create (capabilities); // not yet known as default, create new
if (!res)
throw lumiera::error::Config ( str(format("The following Query could not be resolved: %s.")
% capabilities.asKey())
, LUMIERA_ERROR_CAPABILITY_QUERY );
else
return res;
}
} // namespace mobject::session
} // namespace mobject
/***************************************************************/
/* explicit template instantiations for querying various Types */
/***************************************************************/
#include "proc/asset/procpatt.hpp"
#include "proc/asset/pipe.hpp"
#include "proc/asset/track.hpp"
#include "proc/mobject/session/track.hpp"
namespace mobject
{
namespace session
{
using asset::Pipe;
using asset::PPipe;
using asset::ProcPatt;
using asset::PProcPatt;
using mobject::session::Track;
using mobject::session::TrackAsset;
using mobject::session::PTrack;
using mobject::session::PTrackAsset;
template PPipe DefsManager::operator() (const Query<Pipe>&);
template PProcPatt DefsManager::operator() (const Query<const ProcPatt>&);
template PTrack DefsManager::operator() (const Query<Track>&);
template PTrackAsset DefsManager::operator() (const Query<TrackAsset>&);
template bool DefsManager::define (const PPipe&, const Query<Pipe>&);
template bool DefsManager::forget (const PPipe&);
} // namespace mobject::session
} // namespace mobject

View file

@ -0,0 +1,120 @@
/*
DEFSMANAGER.hpp - access to preconfigured default objects and definitions
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef MOBJECT_SESSION_DEFSMANAGER_H
#define MOBJECT_SESSION_DEFSMANAGER_H
#include "common/query.hpp"
#include <boost/scoped_ptr.hpp>
#include <boost/utility.hpp>
#include <tr1/memory>
namespace mobject
{
namespace session
{
using std::tr1::shared_ptr;
using boost::scoped_ptr;
class DefsRegistry;
/**
* Organize a collection of preconfigured default objects.
* For various kinds of objects we can tweek the default parametrisation
* as part of the general session configuration. A ref to an instance of
* this class is accessible through the current session and can be used
* to fill in parts of the configuration of new objects, if the user
* code didn't give more specific parameters. Necessary sub-objects
* will be created on demand, and any default configuration, once
* found, will be remembered and stored with the current session.
*/
class DefsManager : private boost::noncopyable
{
scoped_ptr<DefsRegistry> defsRegistry;
protected:
DefsManager () throw();
friend class SessManagerImpl;
public:
/** common access point: retrieve the default object fulfilling
* some given conditions. May silently trigger object creation.
* @throw error::Config in case no solution is possible, which
* is considered \e misconfiguration.
*/
template<class TAR>
shared_ptr<TAR> operator() (const lumiera::Query<TAR>&);
/** search through the registered defaults, never create anything.
* @return object fulfilling the query, \c empty ptr if not found.
*/
template<class TAR>
shared_ptr<TAR> search (const lumiera::Query<TAR>&);
/** retrieve an object fulfilling the query and register it as default.
* The resolution is delegated to the ConfigQuery system (which may cause
* creation of new object instances)
* @return object fulfilling the query, \c empty ptr if no solution.
*/
template<class TAR>
shared_ptr<TAR> create (const lumiera::Query<TAR>&);
/** register the given object as default, after ensuring it fulfills the
* query. The latter may cause some properties of the object to be set,
* trigger creation of additional objects, and may fail altogether.
* @return true if query was successfull and object is registered as default
* @note only a weak ref to the object is stored
*/
template<class TAR>
bool define (const shared_ptr<TAR>&, const lumiera::Query<TAR>&);
/** remove the defaults registration of the given object, if there was such
* @return false if nothing has been changed because the object wasn't registered
*/
template<class TAR>
bool forget (const shared_ptr<TAR>&);
// Q: can we have something along the line of...?
//
// template
// < class TAR, ///< the target to query for
// template <class> class SMP ///< smart pointer class to wrap the result
// >
// SMP<TAR> operator() (const lumiera::Query<TAR>&);
};
} // namespace mobject::session
} // namespace mobject
#endif

View file

@ -0,0 +1,323 @@
/*
DEFSREGISTRY.hpp - implementation of the default object store
Copyright (C) Lumiera.org
2008, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef MOBJECT_SESSION_DEFSREGISTRY_H
#define MOBJECT_SESSION_DEFSREGISTRY_H
#include "common/multithread.hpp"
#include "common/query.hpp"
#include "common/util.hpp"
#include <set>
#include <vector>
#include <tr1/memory>
#include <boost/format.hpp>
#include <boost/utility.hpp>
#include <boost/lambda/lambda.hpp>
namespace mobject
{
namespace session
{
using std::tr1::shared_ptr;
using std::tr1::weak_ptr;
using lumiera::Thread;
using lumiera::Query;
using std::string;
using boost::format;
using boost::lambda::_1;
using boost::lambda::var;
namespace // Implementation details
{
struct TableEntry
{
virtual ~TableEntry() {};
};
/** we maintain an independent defaults registry
* for every participating kind of objects */
typedef std::vector<shared_ptr<TableEntry> > Table;
uint maxSlots (0); ///< number of different registered Types
format dumpRecord ("%2i| %64s --> %s\n");
/**
* holding a single "default object" entry
*/
template<class TAR>
struct Record
{
uint degree;
Query<TAR> query;
weak_ptr<TAR> objRef;
Record (const Query<TAR>& q, const shared_ptr<TAR>& obj)
: degree (lumiera::query::countPraed (q)),
query (q),
objRef (obj)
{ }
struct Search ///< Functor searching for a specific object
{
Search (const shared_ptr<TAR>& obj)
: obj_(obj) { }
const shared_ptr<TAR>& obj_;
bool
operator() (const Record& rec)
{
shared_ptr<TAR> storedObj (rec.objRef.lock());
return storedObj && (storedObj == obj_);
}
};
struct OrderRelation
{
inline bool
operator() (Record one, Record two) ///< @note doesn't touch the objRef
{
return ( one.degree < two.degree
||(one.degree == two.degree && one.query < two.query)
);
}
};
operator string () const { return str (dumpRecord % degree % query % dumpObj()); }
string dumpObj () const { shared_ptr<TAR> o (objRef.lock()); return o? string(*o):"dead"; }
};
/** every new kind of object (Type) creates a new
* slot in the main Table holding all registered
* default objects. Each slot actually holds a
* separate tree (set) of registry entries
*/
template<class TAR>
struct Slot : public TableEntry
{
typedef typename Record<TAR>::OrderRelation Ordering;
typedef std::set<Record<TAR>, Ordering> Registry;
Registry registry;
static size_t index; ///< where to find this Slot in every Table
static Registry&
access (Table& table)
{
if ( !index
|| index > table.size()
||!table[index-1])
createSlot (table);
ASSERT (0 < index && index<=table.size() && table[index-1]);
Slot* item = static_cast<Slot*> (table[index-1].get());
return item->registry;
}
private:
static void
createSlot (Table& table)
{
Thread::Lock<TableEntry> guard SIDEEFFECT;
if (!index)
index = ++maxSlots;
if (index > table.size())
table.resize (index);
table[index-1].reset(new Slot);
}
};
// static vars to organize one Table Slot per type....
template<class TAR>
size_t Slot<TAR>::index (0);
}
/**
* @internal Helper for organizing preconfigured default objects.
* Maintaines a collection of objects known or encountered as "default"
* for a given type. This collection is ordered by "degree of constriction",
* which is implemented by counting the number of predicates in the query
* used to define or identify each object.
* Accessing an object identified by a query causes the query to be resolved
* (executed in prolog), which may result in some additional properties of
* the object being bound or specified.
* @todo as of 3/2008 the real query implementation is missing, and the
* exact behaviour has to be defined.
*/
class DefsRegistry : private boost::noncopyable
{
Table table_;
public:
/** used for enumerating solutions */
template<class TAR>
class Iter
{
friend class DefsRegistry;
typedef typename Slot<TAR>::Registry::iterator II;
II p,i,e;
shared_ptr<TAR> next, ptr;
Iter (II from, II to) ///< just ennumerates the given range
: p(from), i(from), e(to)
{
if (i!=e) ++i; // p is next to be tested, i always one ahead
operator++ ();
}
Iter (II match, II from, II to) ///< returns direct match first, then ennumerates
: p(match), i(from), e(to)
{
operator++ (); // init to first element (or to null if emty)
}
shared_ptr<TAR> findNext () throw()
{
while (!next)
{
if (p==e) break;
next = p->objRef.lock();
p = i++;
}
return next;
}
public:
shared_ptr<TAR> operator* () { return ptr; }
bool hasNext () { return next || findNext(); }
Iter operator++ (int) { Iter tmp=*this; operator++(); return tmp; }
Iter& operator++ ()
{
ptr=findNext();
next.reset();
return *this;
}
};
/** find a sequence of "default" objects possibliy matching the query.
* If there was a registration for some object of the given kind with
* the \em same query, this one will be first in the sequence. Besides,
* the sequence will yield all still existing registered "default" objects
* of this kind, ordered ascending by "degree of constriction", i.e. starting
* with the object registered togehter with the shortest query.
* @return a forward input iterator yielding this sequence
* @note none of the queries will be evaluated (we're just counting predicates)
*/
template<class TAR>
Iter<TAR> candidates (const Query<TAR>& query)
{
shared_ptr<TAR> dummy;
Record<TAR> entry (query, dummy);
typedef typename Slot<TAR>::Registry Registry;
Registry& registry = Slot<TAR>::access(table_);
// try to get a possible direct match (same query)
typename Registry::iterator pos = registry.find (entry);
typename Registry::iterator end = registry.end();
if (pos==end)
return Iter<TAR> (registry.begin(), end); // just ennumerate contents
else
return Iter<TAR> (pos, registry.begin(), end); // start with direct match
}
/** register the object as being "default" when searching something
* similar as designated by the given query. Only a weak ref is stored.
* @param obj Will be rebound, if another object is already stored.
* @return true if object has actually been stored, false if another
* object is registered for exactly the same query. In this
* case, also the param obj shared-ptr is rebound!
*/
template<class TAR>
bool put (shared_ptr<TAR>& obj, const Query<TAR>& query)
{
Record<TAR> entry (query, obj);
typedef typename Slot<TAR>::Registry Registry;
typedef typename Registry::iterator RIter;
Registry& registry = Slot<TAR>::access(table_);
RIter pos = registry.lower_bound (entry);
if ( pos!=registry.end()
&& pos->query == query)
{
shared_ptr<TAR> storedObj (pos->objRef.lock());
if (storedObj)
return (storedObj == obj);
else
// use the opportunity and purge the expired entry
registry.erase(pos++);
}
// no existing entry....
registry.insert(pos, entry);
ENSURE (registry.find (entry) != registry.end());
return true;
}
/** if this object is registered as "default" in some way, drop the registration.
* @return false if the object wasn't registered at all.
*/
template<class TAR>
bool forget (const shared_ptr<TAR>& obj)
{
typedef typename Slot<TAR>::Registry Registry;
typedef typename Record<TAR>::Search SearchFunc;
Registry& registry = Slot<TAR>::access(table_);
return util::remove_if(registry, SearchFunc (obj));
}
/** helper for diagnostics.
* @note to use it, your objects need an operator string()
*/
template<class TAR>
string dump()
{
string res;
util::for_each ( Slot<TAR>::access(table_)
, var(res) += _1
);
return res;
}
};
} // namespace mobject::session
} // namespace mobject
#endif

View file

@ -24,12 +24,39 @@
#include "proc/mobject/session/edl.hpp"
#include "proc/mobject/session/track.hpp"
#include "proc/mobject/placement.hpp"
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/session/mobjectfactory.hpp"
#include "proc/asset/track.hpp"
namespace mobject
{
namespace session
{
namespace // Implementation details
{
using asset::Query;
/** helper: create a default configured track asset */
const Placement<Track>
makeDefaultTrack ()
{
PTrackAsset tA = asset::Struct::create (Query<asset::Track> ("dummy()"));
return MObject::create (tA);
}
}
/** create an empty default configured EDL */
EDL::EDL ()
: track (makeDefaultTrack ()),
clips (0)
{
}
/** @deprecated not sure if it is a good idea
* to have this on the interface

View file

@ -29,7 +29,7 @@
#include "proc/mobject/mobject.hpp"
#include "proc/mobject/placement.hpp"
#include "proc/asset/track.hpp"
#include "proc/mobject/session/track.hpp"
using proc_interface::PAsset; // TODO better way to refer to a track?
@ -44,14 +44,16 @@ namespace mobject
class EDL
{
protected:
vector<PAsset> tracks;
Placement<Track> track;
vector<MObject *> clips;
public:
EDL();
bool contains (const PMO& placement);
PMO& find (const string& id); ///< @todo how to refer to clips? using asset IDs??
vector<PAsset>& getTracks () { return tracks; } ///< @todo use track assets correct, make const!
Placement<Track>& getTracks () { return track; } ///< @todo work out the correct use of tracks! make const correct!
size_t size ()
{
UNIMPLEMENTED ("what ist the 'size' of an EDL?");

View file

@ -48,7 +48,6 @@ namespace mobject
class Fixture : public EDL
{
protected:
Track tracks;
list<ExplicitPlacement*> timeline;

View file

@ -98,7 +98,7 @@ namespace mobject
{
LocatingSolution solution;
resolve (solution);
return SolutionData (solution.getTime(), solution.getTrack());
return SolutionData (solution.getTime(), solution.getPipe());
}
bool
@ -142,10 +142,11 @@ namespace mobject
return minTime;
}
LocatingPin::Track
LocatingPin::LocatingSolution::getTrack()
LocatingPin::Pipe
LocatingPin::LocatingSolution::getPipe()
{
UNIMPLEMENTED ("get effective Track number of Solution");
UNIMPLEMENTED ("get effective Pipe of Solution");
return Pipe ();
}

Some files were not shown because too many files have changed in this diff Show more