OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
t_service.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 #ifndef T_SERVICE_H
21 #define T_SERVICE_H
22 
23 #include "t_function.h"
24 #include <vector>
25 
26 class t_program;
27 
32 class t_service : public t_type {
33  public:
34  t_service(t_program* program) :
35  t_type(program),
36  extends_(NULL) {}
37 
38  bool is_service() const {
39  return true;
40  }
41 
42  void set_extends(t_service* extends) {
43  extends_ = extends;
44  }
45 
46  void add_function(t_function* func) {
47  std::vector<t_function*>::const_iterator iter;
48  for (iter = functions_.begin(); iter != functions_.end(); iter++) {
49  if (func->get_name() == (*iter)->get_name()) {
50  throw "Function " + func->get_name() + " is already defined";
51  }
52  }
53  functions_.push_back(func);
54  }
55 
56  const std::vector<t_function*>& get_functions() const {
57  return functions_;
58  }
59 
61  return extends_;
62  }
63 
64  virtual std::string get_fingerprint_material() const {
65  // Services should never be used in fingerprints.
66  throw "BUG: Can't get fingerprint material for service.";
67  }
68 
69  private:
70  std::vector<t_function*> functions_;
72 };
73 
74 #endif
Definition: t_type.h:48
const std::string & get_name() const
Definition: t_function.h:91
bool is_service() const
Definition: t_service.h:38
void set_extends(t_service *extends)
Definition: t_service.h:42
t_service * extends_
Definition: t_service.h:71
const std::vector< t_function * > & get_functions() const
Definition: t_service.h:56
void add_function(t_function *func)
Definition: t_service.h:46
t_service * get_extends()
Definition: t_service.h:60
std::vector< t_function * > functions_
Definition: t_service.h:70
virtual std::string get_fingerprint_material() const
Definition: t_service.h:64
t_service(t_program *program)
Definition: t_service.h:34