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