Line data Source code
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 : 28 : /** 29 : * A service consists of a set of functions. 30 : * 31 : */ 32 : class t_service : public t_type { 33 : public: 34 0 : t_service(t_program* program) : 35 : t_type(program), 36 0 : extends_(NULL) {} 37 : 38 0 : bool is_service() const { 39 0 : return true; 40 : } 41 : 42 0 : void set_extends(t_service* extends) { 43 0 : extends_ = extends; 44 0 : } 45 : 46 0 : void add_function(t_function* func) { 47 0 : std::vector<t_function*>::const_iterator iter; 48 0 : for (iter = functions_.begin(); iter != functions_.end(); iter++) { 49 0 : if (func->get_name() == (*iter)->get_name()) { 50 0 : throw "Function " + func->get_name() + " is already defined"; 51 : } 52 : } 53 0 : functions_.push_back(func); 54 0 : } 55 : 56 0 : const std::vector<t_function*>& get_functions() const { 57 0 : return functions_; 58 : } 59 : 60 0 : t_service* get_extends() { 61 0 : return extends_; 62 : } 63 : 64 0 : virtual std::string get_fingerprint_material() const { 65 : // Services should never be used in fingerprints. 66 0 : throw "BUG: Can't get fingerprint material for service."; 67 : } 68 : 69 : private: 70 : std::vector<t_function*> functions_; 71 : t_service* extends_; 72 : }; 73 : 74 : #endif