initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / applications / test / callback / callbackTest.C
blobdc344246783ae01f7800d40f9ce5bf735e58c3a7
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Application
26     callBackTest
28 Description
30 \*---------------------------------------------------------------------------*/
32 #include "Callback.H"
34 using namespace Foam;
36 class callback
38     public Callback<callback>
40 public:
42     callback(CallbackRegistry<callback>& cbr)
43     :
44         Callback<callback>(cbr)
45     {}
47     ~callback()
48     {}
50     virtual const word& name() const = 0;
52     void testCallbackFunction() const
53     {
54         Info<< "calling testCallbackFunction for object " << name() << endl;
55     }
59 class callbackRegistry
61     public CallbackRegistry<callback>
63 public:
65     callbackRegistry()
66     {}
68     ~callbackRegistry()
69     {}
71     void testCallbackFunction() const
72     {
73         forAllConstIter(callbackRegistry, *this, iter)
74         {
75             iter().testCallbackFunction();
76         }
77     }
81 class objectWithCallback
83     public callback
85     word name_;
87 public:
89     objectWithCallback(const word& n, callbackRegistry& cbr)
90     :
91         callback(cbr),
92         name_(n)
93     {}
95     virtual const word& name() const
96     {
97         return name_;
98     }
102 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
103 // Main program:
105 int main(int argc, char *argv[])
107     callbackRegistry cbr;
109     objectWithCallback ob1("ob1", cbr);
110     objectWithCallback ob2("ob2", cbr);
112     cbr.testCallbackFunction();
114     {
115         objectWithCallback ob1("ob1", cbr);
116         cbr.testCallbackFunction();
117     }
119     cbr.testCallbackFunction();
121     Info << "End\n" << endl;
123     return 0;
127 // ************************************************************************* //