Imported Upstream version 3.2.2
[debian/gnuradio] / mblock / src / lib / mb_runtime_nop.cc
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2007,2008 Free Software Foundation, Inc.
4  * 
5  * This file is part of GNU Radio
6  * 
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  * 
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25 #include <mb_runtime_nop.h>
26 #include <mblock/mblock.h>
27 #include <mblock/class_registry.h>
28 #include <mblock/exception.h>
29
30 mb_runtime_sptr 
31 mb_make_runtime_nop()
32 {
33   return mb_runtime_sptr(new mb_runtime_nop());
34 }
35
36
37 mb_runtime_nop::mb_runtime_nop()
38 {
39   // nop for now
40 }
41
42 mb_runtime_nop::~mb_runtime_nop()
43 {
44   // nop for now
45 }
46
47
48 bool
49 mb_runtime_nop::run(const std::string &instance_name,
50                     const std::string &class_name,
51                     pmt_t user_arg, pmt_t *result)
52 {
53   class initial_visitor : public mb_visitor
54   {
55   public:
56     bool operator()(mb_mblock *mblock)
57     {
58       mblock->initial_transition();
59       return true;
60     }
61   };
62
63   initial_visitor visitor;
64
65   if (result)
66     *result = PMT_T;
67
68   d_top = create_component(instance_name, class_name, user_arg);
69   d_top->walk_tree(&visitor);
70
71   return true;
72 }
73
74 mb_mblock_sptr
75 mb_runtime_nop::create_component(const std::string &instance_name,
76                                  const std::string &class_name,
77                                  pmt_t user_arg)
78 {
79   mb_mblock_maker_t maker;
80   if (!mb_class_registry::lookup_maker(class_name, &maker))
81     throw mbe_no_such_class(0, class_name + " (in " + instance_name + ")");
82
83   return maker(this, instance_name, user_arg);
84 }