Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / applications / test / callback / Test-callback.C
blob09c4d78d60caddcc32a85d789e50d84bf2a96360
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Application
25     callBackTest
27 Description
29 \*---------------------------------------------------------------------------*/
31 #include "Callback.H"
33 using namespace Foam;
35 class callback
37     public Callback<callback>
39 public:
41     callback(CallbackRegistry<callback>& cbr)
42     :
43         Callback<callback>(cbr)
44     {}
46     ~callback()
47     {}
49     virtual const word& name() const = 0;
51     void testCallbackFunction() const
52     {
53         Info<< "calling testCallbackFunction for object " << name() << endl;
54     }
58 class callbackRegistry
60     public CallbackRegistry<callback>
62 public:
64     callbackRegistry()
65     {}
67     ~callbackRegistry()
68     {}
70     void testCallbackFunction() const
71     {
72         forAllConstIter(callbackRegistry, *this, iter)
73         {
74             iter().testCallbackFunction();
75         }
76     }
80 class objectWithCallback
82     public callback
84     word name_;
86 public:
88     objectWithCallback(const word& n, callbackRegistry& cbr)
89     :
90         callback(cbr),
91         name_(n)
92     {}
94     virtual const word& name() const
95     {
96         return name_;
97     }
101 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
102 // Main program:
104 int main(int argc, char *argv[])
106     callbackRegistry cbr;
108     objectWithCallback ob1("ob1", cbr);
109     objectWithCallback ob2("ob2", cbr);
111     cbr.testCallbackFunction();
113     {
114         objectWithCallback ob1("ob1", cbr);
115         cbr.testCallbackFunction();
116     }
118     cbr.testCallbackFunction();
120     Info<< "End\n" << endl;
122     return 0;
126 // ************************************************************************* //