8293e0c241563895cacf080e0db65f88a7b22fa9
[debian/gnuradio] / mblock / src / lib / mb_runtime_nop.cc
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2007,2008,2009 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 using namespace pmt;
31
32 mb_runtime_sptr 
33 mb_make_runtime_nop()
34 {
35   return mb_runtime_sptr(new mb_runtime_nop());
36 }
37
38
39 mb_runtime_nop::mb_runtime_nop()
40 {
41   // nop for now
42 }
43
44 mb_runtime_nop::~mb_runtime_nop()
45 {
46   // nop for now
47 }
48
49
50 bool
51 mb_runtime_nop::run(const std::string &instance_name,
52                     const std::string &class_name,
53                     pmt_t user_arg, pmt_t *result)
54 {
55   class initial_visitor : public mb_visitor
56   {
57   public:
58     bool operator()(mb_mblock *mblock)
59     {
60       mblock->initial_transition();
61       return true;
62     }
63   };
64
65   initial_visitor visitor;
66
67   if (result)
68     *result = PMT_T;
69
70   d_top = create_component(instance_name, class_name, user_arg);
71   d_top->walk_tree(&visitor);
72
73   return true;
74 }
75
76 mb_mblock_sptr
77 mb_runtime_nop::create_component(const std::string &instance_name,
78                                  const std::string &class_name,
79                                  pmt_t user_arg)
80 {
81   mb_mblock_maker_t maker;
82   if (!mb_class_registry::lookup_maker(class_name, &maker))
83     throw mbe_no_such_class(0, class_name + " (in " + instance_name + ")");
84
85   return maker(this, instance_name, user_arg);
86 }