OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
t_classdef.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_CLASSDEF_H
21 #define T_CLASSDEF_H
22 
23 #include "t_function.h"
24 #include "t_struct.h"
25 #include <vector>
26 
27 class t_program;
28 
33 class t_classdef : public t_type {
34  public:
35  t_classdef(t_program* program) :
36  t_type(program) {};
37 
38  bool is_classdef() const {
39  return true;
40  }
41 
42  void add_function(t_function* func) {
43  std::vector<t_function*>::const_iterator iter;
44  for (iter = functions_.begin(); iter != functions_.end(); iter++) {
45  if (func->get_name() == (*iter)->get_name()) {
46  throw "Function " + func->get_name() + " is already defined";
47  }
48  }
49  functions_.push_back(func);
50  }
51 
52  const std::vector<t_function*>& get_functions() const {
53  return functions_;
54  }
55 
56  void add_structs(t_struct* structs) {
57  structs_.push_back(structs);
58  }
59 
60  const std::vector<t_struct*>& get_structs() const {
61  return structs_;
62  }
63 
64  virtual std::string get_fingerprint_material() const {
65  // Classdef should never be used in fingerprints.
66  throw "BUG: Can't get fingerprint material for class def.";
67  }
68 
69  private:
70  std::vector<t_function*> functions_;
71  std::vector<t_struct*> structs_;
72 };
73 
74 #endif
bool is_classdef() const
Definition: t_classdef.h:38
Definition: t_type.h:48
const std::string & get_name() const
Definition: t_function.h:91
const std::vector< t_struct * > & get_structs() const
Definition: t_classdef.h:60
void add_function(t_function *func)
Definition: t_classdef.h:42
std::vector< t_function * > functions_
Definition: t_classdef.h:70
std::vector< t_struct * > structs_
Definition: t_classdef.h:71
t_classdef(t_program *program)
Definition: t_classdef.h:35
const std::vector< t_function * > & get_functions() const
Definition: t_classdef.h:52
void add_structs(t_struct *structs)
Definition: t_classdef.h:56
virtual std::string get_fingerprint_material() const
Definition: t_classdef.h:64