sc_attr.hh revision 12837
1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution; 11 * neither the name of the copyright holders nor the names of its 12 * contributors may be used to endorse or promote products derived from 13 * this software without specific prior written permission. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * Authors: Gabe Black 28 */ 29 30#ifndef __SYSTEMC_EXT_CORE_SC_ATTR_HH__ 31#define __SYSTEMC_EXT_CORE_SC_ATTR_HH__ 32 33#include <string> 34 35namespace sc_core 36{ 37 38class sc_attr_base 39{ 40 public: 41 sc_attr_base(const std::string &); 42 sc_attr_base(const sc_attr_base &); 43 virtual ~sc_attr_base(); 44 45 const std::string &name() const; 46 47 protected: 48 void warn_unimpl(const char *func); 49 50 private: 51 // Disabled 52 sc_attr_base(); 53 sc_attr_base &operator = (const sc_attr_base &); 54}; 55 56template <class T> 57class sc_attribute : public sc_attr_base 58{ 59 public: 60 sc_attribute(const std::string &_name) : sc_attr_base(_name) 61 { 62 warn_unimpl(__PRETTY_FUNCTION__); 63 } 64 sc_attribute(const std::string &_name, const T &t) : 65 sc_attr_base(_name), value(t) 66 { 67 warn_unimpl(__PRETTY_FUNCTION__); 68 } 69 sc_attribute(const sc_attribute<T> &other) : 70 sc_attr_base(other.name()), value(other.value) 71 { 72 warn_unimpl(__PRETTY_FUNCTION__); 73 } 74 virtual ~sc_attribute() { warn_unimpl(__PRETTY_FUNCTION__); } 75 T value; 76 77 private: 78 // Disabled 79 sc_attribute() {} 80 sc_attribute<T> &operator = (const sc_attribute<T> &) { return *this; } 81}; 82 83class sc_attr_cltn 84{ 85 public: 86 typedef sc_attr_base *elem_type; 87 typedef elem_type *iterator; 88 typedef const elem_type *const_iterator; 89 90 iterator begin(); 91 const_iterator begin() const; 92 iterator end(); 93 const_iterator end() const; 94}; 95 96} // namespace sc_core 97 98#endif //__SYSTEMC_EXT_CORE_SC_ATTR_HH__ 99