From 7adb1b250b712920ea5d685f146ad6df55346393 Mon Sep 17 00:00:00 2001
From: Gabe Black <gabeblack@google.com>
Date: Fri, 18 May 2018 02:12:34 -0700
Subject: systemc: Stub out all the standard utilility classes and functions.

Change-Id: I9e9724edb6281e0b0a6bae5546b0ede77d295c12
Reviewed-on: https://gem5-review.googlesource.com/10841
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
---
 src/systemc/ext/utils/_using.hh            |  98 +++++++
 src/systemc/ext/utils/_utils.hh            |  40 +++
 src/systemc/ext/utils/endian.hh            |  79 ++++++
 src/systemc/ext/utils/functions.hh         | 104 +++++++
 src/systemc/ext/utils/sc_exception.hh      |  42 +++
 src/systemc/ext/utils/sc_report.hh         |  84 ++++++
 src/systemc/ext/utils/sc_report_handler.hh | 135 +++++++++
 src/systemc/ext/utils/sc_trace_file.hh     | 156 ++++++++++
 src/systemc/ext/utils/sc_vector.hh         | 440 +++++++++++++++++++++++++++++
 src/systemc/ext/utils/warn_unimpl.hh       |  40 +++
 10 files changed, 1218 insertions(+)
 create mode 100644 src/systemc/ext/utils/_using.hh
 create mode 100644 src/systemc/ext/utils/_utils.hh
 create mode 100644 src/systemc/ext/utils/endian.hh
 create mode 100644 src/systemc/ext/utils/functions.hh
 create mode 100644 src/systemc/ext/utils/sc_exception.hh
 create mode 100644 src/systemc/ext/utils/sc_report.hh
 create mode 100644 src/systemc/ext/utils/sc_report_handler.hh
 create mode 100644 src/systemc/ext/utils/sc_trace_file.hh
 create mode 100644 src/systemc/ext/utils/sc_vector.hh
 create mode 100644 src/systemc/ext/utils/warn_unimpl.hh

(limited to 'src/systemc/ext/utils')

diff --git a/src/systemc/ext/utils/_using.hh b/src/systemc/ext/utils/_using.hh
new file mode 100644
index 000000000..e6477c7cb
--- /dev/null
+++ b/src/systemc/ext/utils/_using.hh
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTILS__USING_HH__
+#define __SYSTEMC_EXT_UTILS__USING_HH__
+
+#include "_utils.hh"
+
+using sc_core::sc_severity;
+using sc_core::SC_INFO;
+using sc_core::SC_WARNING;
+using sc_core::SC_ERROR;
+using sc_core::SC_FATAL;
+using sc_core::SC_MAX_SEVERITY;
+using sc_core::sc_verbosity;
+using sc_core::SC_NONE;
+using sc_core::SC_LOW;
+using sc_core::SC_MEDIUM;
+using sc_core::SC_HIGH;
+using sc_core::SC_FULL;
+using sc_core::SC_DEBUG;
+using sc_core::sc_report;
+
+using sc_core::sc_actions;
+using sc_core::SC_UNSPECIFIED;
+using sc_core::SC_DO_NOTHING;
+using sc_core::SC_THROW;
+using sc_core::SC_LOG;
+using sc_core::SC_DISPLAY;
+using sc_core::SC_CACHE_REPORT;
+using sc_core::SC_INTERRUPT;
+using sc_core::SC_STOP;
+using sc_core::SC_ABORT;
+using sc_core::sc_report_handler_proc;
+using sc_core::sc_report_handler;
+using sc_core::sc_interrupt_here;
+using sc_core::sc_stop_here;
+using sc_core::SC_DEFAULT_INFO_ACTIONS;
+using sc_core::SC_DEFAULT_WARNING_ACTIONS;
+using sc_core::SC_DEFAULT_ERROR_ACTIONS;
+using sc_core::SC_DEFAULT_FATAL_ACTIONS;
+
+using sc_core::sc_trace_file;
+using sc_core::sc_create_vcd_trace_file;
+using sc_core::sc_close_vcd_trace_file;
+using sc_core::sc_write_comment;
+using sc_core::sc_trace;
+
+using sc_core::sc_exception;
+
+using sc_core::sc_vector_base;
+using sc_core::sc_vector_iter;
+using sc_core::sc_vector;
+using sc_core::sc_vector_assembly;
+
+using sc_dt::sc_abs;
+using sc_dt::sc_max;
+using sc_dt::sc_min;
+
+using sc_core::sc_version_major;
+using sc_core::sc_version_minor;
+using sc_core::sc_version_patch;
+using sc_core::sc_version_originator;
+using sc_core::sc_version_release_date;
+using sc_core::sc_version_prerelease;
+using sc_core::sc_version_string;
+using sc_core::sc_copyright_string;
+using sc_core::sc_release;
+using sc_core::sc_copyright;
+using sc_core::sc_version;
+
+#endif  //__SYSTEMC_EXT_UTILS__USING_HH__
diff --git a/src/systemc/ext/utils/_utils.hh b/src/systemc/ext/utils/_utils.hh
new file mode 100644
index 000000000..d76caf9ec
--- /dev/null
+++ b/src/systemc/ext/utils/_utils.hh
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL__UTIL_HH__
+#define __SYSTEMC_EXT_UTIL__UTIL_HH__
+
+#include "functions.hh"
+#include "sc_exception.hh"
+#include "sc_report.hh"
+#include "sc_report_handler.hh"
+#include "sc_trace_file.hh"
+#include "sc_vector.hh"
+
+#endif  //__SYSTEMC_EXT_UTIL__UTIL_HH__
diff --git a/src/systemc/ext/utils/endian.hh b/src/systemc/ext/utils/endian.hh
new file mode 100644
index 000000000..fcf47e824
--- /dev/null
+++ b/src/systemc/ext/utils/endian.hh
@@ -0,0 +1,79 @@
+// Copyright 2005 Caleb Epstein
+// Copyright 2006 John Maddock
+// Copyright 2010 Rene Rivera
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/*
+ * Copyright (c) 1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ */
+
+/*
+ * Copyright notice reproduced from <sysc/packages/boost/detail/limits.hpp>,
+ * from which this code was originally taken.
+ *
+ * Modified by Caleb Epstein to use <endian.h> with GNU libc and to
+ * defined the SC_BOOST_ENDIAN macro.
+ */
+
+#ifndef __SYSTEMC_EXT_UTILS_ENDIAN_HH__
+#define __SYSTEMC_EXT_UTILS_ENDIAN_HH__
+
+// GNU libc offers the helpful header <endian.h> which defines
+// __BYTE_ORDER
+
+#if defined (__GLIBC__)
+# include <endian.h>
+# if (__BYTE_ORDER == __LITTLE_ENDIAN)
+#  define SC_BOOST_LITTLE_ENDIAN
+# elif (__BYTE_ORDER == __BIG_ENDIAN)
+#  define SC_BOOST_BIG_ENDIAN
+# elif (__BYTE_ORDER == __PDP_ENDIAN)
+#  define SC_BOOST_PDP_ENDIAN
+# else
+#  error Unknown machine endianness detected.
+# endif
+# define SC_BOOST_BYTE_ORDER __BYTE_ORDER
+#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) || \
+    defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) || \
+    defined(_STLP_BIG_ENDIAN) && !defined(_STLP_LITTLE_ENDIAN)
+# define SC_BOOST_BIG_ENDIAN
+# define SC_BOOST_BYTE_ORDER 4321
+#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) || \
+    defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) || \
+    defined(_STLP_LITTLE_ENDIAN) && !defined(_STLP_BIG_ENDIAN)
+# define SC_BOOST_LITTLE_ENDIAN
+# define SC_BOOST_BYTE_ORDER 1234
+#elif defined(__sparc) || defined(__sparc__) \
+   || defined(_POWER) || defined(__powerpc__) \
+   || defined(__ppc__) || defined(__ppc64__) \
+   || defined(__hpux) || defined(__hppa) \
+   || defined(_MIPSEB) || defined(_POWER) \
+   || defined(__s390__)
+# define SC_BOOST_BIG_ENDIAN
+# define SC_BOOST_BYTE_ORDER 4321
+#elif defined(__i386__) || defined(__alpha__) \
+   || defined(__ia64) || defined(__ia64__) \
+   || defined(_M_IX86) || defined(_M_IA64) \
+   || defined(_M_ALPHA) || defined(__amd64) \
+   || defined(__amd64__) || defined(_M_AMD64) \
+   || defined(__x86_64) || defined(__x86_64__) \
+   || defined(_M_X64) || defined(__bfin__)
+
+# define SC_BOOST_LITTLE_ENDIAN
+# define SC_BOOST_BYTE_ORDER 1234
+#else
+# error The file boost/detail/endian.hpp needs to be set up for your CPU type.
+#endif
+
+
+#endif // __SYSTEMC_EXT_UTILS_ENDIAN_HH__
diff --git a/src/systemc/ext/utils/functions.hh b/src/systemc/ext/utils/functions.hh
new file mode 100644
index 000000000..5c259e1b7
--- /dev/null
+++ b/src/systemc/ext/utils/functions.hh
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL_FUNCTIONS_HH__
+#define __SYSTEMC_EXT_UTIL_FUNCTIONS_HH__
+
+#include <string>
+
+namespace sc_dt
+{
+
+template <class T>
+const T
+sc_abs(const T &a)
+{
+    // return ( a >= 0 ? a : -a );
+    // the code below is functionaly the same as the code above; the
+    // difference is that the code below works for all arithmetic
+    // SystemC datatypes.
+    T z(a);
+    z = 0;
+    if (a >= z) {
+        return a;
+    } else {
+        T c(a);
+        c = -a;
+        return c;
+    }
+}
+
+template <class T>
+const T sc_max(const T &a, const T &b) { return ((a >= b) ? a : b); }
+
+template <class T>
+const T sc_min(const T &a, const T &b) { return ((a <= b) ? a : b); }
+
+} // namespace sc_dt
+
+namespace sc_core
+{
+
+#define IEEE_1666_SYSTEMC 201101L
+
+#define SC_VERSION_MAJOR 0
+#define SC_VERSION_MINOR 1
+#define SC_VERSION_PATCH 0
+#define SC_VERSION_ORIGINATOR "gem5"
+#define SC_VERSION_RELEASE_DATE "NA"
+#define SC_VERSION_PRERELEASE "beta"
+#define SC_IS_PRERELEASE true
+#define SC_VERSION "0.1.0_beta-gem5"
+#define SC_COPYRIGHT "Copyright 2018 Google, Inc."
+
+extern const unsigned int sc_version_major;
+extern const unsigned int sc_version_minor;
+extern const unsigned int sc_version_patch;
+extern const std::string sc_version_originator;
+extern const std::string sc_version_release_date;
+extern const std::string sc_version_prerelease;
+extern const bool sc_is_prerelease;
+extern const std::string sc_version_string;
+extern const std::string sc_copyright_string;
+
+static inline const char *
+sc_release()
+{
+    return sc_version_string.c_str();
+}
+static inline const char *
+sc_copyright()
+{
+    return sc_copyright_string.c_str();
+}
+const char *sc_version();
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTIL_FUNCTIONS_HH__
diff --git a/src/systemc/ext/utils/sc_exception.hh b/src/systemc/ext/utils/sc_exception.hh
new file mode 100644
index 000000000..3bd8fb0f1
--- /dev/null
+++ b/src/systemc/ext/utils/sc_exception.hh
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL_SC_EXCEPTION_HH__
+#define __SYSTEMC_EXT_UTIL_SC_EXCEPTION_HH__
+
+#include <exception>
+
+namespace sc_core
+{
+
+typedef std::exception sc_exception;
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTIL_SC_EXCEPTION_HH__
diff --git a/src/systemc/ext/utils/sc_report.hh b/src/systemc/ext/utils/sc_report.hh
new file mode 100644
index 000000000..9ba2b334d
--- /dev/null
+++ b/src/systemc/ext/utils/sc_report.hh
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL_SC_REPORT_HH__
+#define __SYSTEMC_EXT_UTIL_SC_REPORT_HH__
+
+#include <exception>
+
+namespace sc_core
+{
+
+class sc_time;
+
+enum sc_severity
+{
+    SC_INFO = 0,
+    SC_WARNING,
+    SC_ERROR,
+    SC_FATAL,
+    SC_MAX_SEVERITY
+};
+
+enum sc_verbosity
+{
+    SC_NONE = 0,
+    SC_LOW = 100,
+    SC_MEDIUM = 200,
+    SC_HIGH = 300,
+    SC_FULL = 400,
+    SC_DEBUG = 500
+};
+
+class sc_report : public std::exception
+{
+  public:
+    sc_report(const sc_report &);
+    sc_report &operator = (const sc_report &);
+    virtual ~sc_report() throw();
+
+    sc_severity get_severity() const;
+    const char *get_msg_type() const;
+    const char *get_msg() const;
+    int get_verbosity() const;
+    const char *get_file_name() const;
+    int get_line_number() const;
+
+    const sc_time &get_time() const;
+    const char *get_process_name() const;
+
+    virtual const char *what() const throw();
+};
+
+// A non-standard function the Accellera datatypes rely on.
+[[noreturn]] void sc_abort();
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTIL_SC_REPORT_HH__
diff --git a/src/systemc/ext/utils/sc_report_handler.hh b/src/systemc/ext/utils/sc_report_handler.hh
new file mode 100644
index 000000000..7347e5f4a
--- /dev/null
+++ b/src/systemc/ext/utils/sc_report_handler.hh
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL_SC_REPORT_HANDLER_HH__
+#define __SYSTEMC_EXT_UTIL_SC_REPORT_HANDLER_HH__
+
+#include "sc_report.hh" // for sc_severity
+
+namespace sc_core
+{
+
+typedef unsigned sc_actions;
+
+enum
+{
+    SC_UNSPECIFIED = 0x0000,
+    SC_DO_NOTHING = 0x0001,
+    SC_THROW = 0x0002,
+    SC_LOG = 0x0004,
+    SC_DISPLAY = 0x0008,
+    SC_CACHE_REPORT = 0x0010,
+    SC_INTERRUPT = 0x0020,
+    SC_STOP = 0x0040,
+    SC_ABORT = 0x0080
+};
+
+#define SC_DEFAULT_INFO_ACTIONS \
+        (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY)
+#define SC_DEFAULT_WARNING_ACTIONS \
+        (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY)
+#define SC_DEFAULT_ERROR_ACTIONS \
+        (::sc_core::SC_LOG | ::sc_core::SC_CACHE_REPORT | ::sc_core::SC_THROW)
+#define SC_DEFAULT_FATAL_ACTIONS \
+        (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY | \
+         ::sc_core::SC_CACHE_REPORT | ::sc_core::SC_ABORT)
+
+typedef void (*sc_report_handler_proc)(const sc_report &, const sc_actions &);
+
+class sc_report_handler
+{
+  public:
+    static void report(sc_severity, const char *msg_type, const char *msg,
+                       const char *file, int line);
+    static void report(sc_severity, const char *msg_type, const char *msg,
+                       int verbosity, const char *file, int line);
+
+    static sc_actions set_actions(sc_severity, sc_actions=SC_UNSPECIFIED);
+    static sc_actions set_actions(const char *msg_type,
+                                  sc_actions=SC_UNSPECIFIED);
+    static sc_actions set_actions(const char *msg_type, sc_severity,
+                                  sc_actions=SC_UNSPECIFIED);
+
+    static int stop_after(sc_severity, int limit=-1);
+    static int stop_after(const char *msg_type, int limit=-1);
+    static int stop_after(const char *msg_type, sc_severity,
+                          sc_actions=SC_UNSPECIFIED);
+
+    static int get_count(sc_severity);
+    static int get_count(const char *msg_type);
+    static int get_count(const char *msg_type, sc_severity);
+
+    int set_verbosity_level(int);
+    int get_verbosity_level();
+
+    static sc_actions suppress(sc_actions);
+    static sc_actions suppress();
+    static sc_actions force(sc_actions);
+    static sc_actions force();
+
+    static void set_handler(sc_report_handler_proc);
+    static void default_handler(const sc_report &, const sc_actions &);
+    static sc_actions get_new_action_id();
+
+    static sc_report *get_cached_report();
+    static void clear_cached_report();
+
+    static bool set_log_file_name(const char *);
+    static const char *get_log_file_name();
+};
+
+#define SC_REPORT_INFO_VERB(msg_type, msg, verbosity) \
+        ::sc_core::sc_report_handler::report( \
+            ::sc_core::SC_INFO, msg_type, msg, verbosity, __FILE__, __LINE__)
+
+#define SC_REPORT_INFO(msg_type, msg) \
+        ::sc_core::sc_report_handler::report( \
+            ::sc_core::SC_INFO, msg_type, msg, __FILE__, __LINE__)
+
+#define SC_REPORT_WARNING(msg_type, msg) \
+        ::sc_core::sc_report_handler::report( \
+            ::sc_core::SC_WARNING, msg_type, msg, __FILE__, __LINE__)
+
+#define SC_REPORT_ERROR(msg_type, msg) \
+        ::sc_core::sc_report_handler::report( \
+            ::sc_core::SC_ERROR, msg_type, msg, __FILE__, __LINE__)
+
+#define SC_REPORT_FATAL(msg_type, msg) \
+        ::sc_core::sc_report_handler::report( \
+            ::sc_core::SC_FATAL, msg_type, msg, __FILE__, __LINE__)
+
+#define sc_assert(expr) \
+        ((void)((expr) ? 0 : (SC_REPORT_FATAL("assertion failed", #expr), 0)))
+
+void sc_interrupt_here(const char *msg_type, sc_severity);
+void sc_stop_here(const char *msg_type, sc_severity);
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTIL_SC_REPORT_HANDLER_HH__
diff --git a/src/systemc/ext/utils/sc_trace_file.hh b/src/systemc/ext/utils/sc_trace_file.hh
new file mode 100644
index 000000000..ec4fd4d6a
--- /dev/null
+++ b/src/systemc/ext/utils/sc_trace_file.hh
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL_SC_TRACE_FILE_HH__
+#define __SYSTEMC_EXT_UTIL_SC_TRACE_FILE_HH__
+
+#include <exception>
+
+#include "../core/sc_time.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_dt
+{
+
+class sc_logic;
+class sc_int_base;
+class sc_uint_base;
+class sc_signed;
+class sc_unsigned;
+class sc_bv_base;
+class sc_lv_base;
+class sc_fxval;
+class sc_fxval_fast;
+class sc_fxnum;
+class sc_fxnum_fast;
+
+} // namespace sc_dt
+
+namespace sc_core
+{
+
+template <class T>
+class sc_signal_in_if;
+
+class sc_trace_file
+{
+  public:
+    virtual void set_time_unit(double, sc_time_unit) = 0;
+};
+
+sc_trace_file *sc_create_vcd_trace_file(const char *name);
+void sc_close_vcd_trace_file(sc_trace_file *tf);
+void sc_write_comment(sc_trace_file *tf, const std::string &comment);
+
+void sc_trace(sc_trace_file *, const bool &, const std::string &);
+void sc_trace(sc_trace_file *, const bool *, const std::string &);
+void sc_trace(sc_trace_file *, const float &, const std::string &);
+void sc_trace(sc_trace_file *, const float *, const std::string &);
+void sc_trace(sc_trace_file *, const double &, const std::string &);
+void sc_trace(sc_trace_file *, const double *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_logic &, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_logic *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_int_base &,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_int_base *,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_uint_base &,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_uint_base *,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_signed &, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_signed *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_unsigned &,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_unsigned *,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_bv_base &, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_bv_base *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_lv_base &, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_lv_base *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxval &, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxval *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxval_fast &,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxval_fast *,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxnum &, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxnum *, const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxnum_fast &,
+              const std::string &);
+void sc_trace(sc_trace_file *, const sc_dt::sc_fxnum_fast *,
+              const std::string &);
+
+void sc_trace(sc_trace_file *, const char &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const char *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const short &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const short *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const int &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const int *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const long &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const long *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const sc_dt::int64 &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const sc_dt::int64 *,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const sc_dt::uint64 &,
+              const std::string &, int width=(8 * sizeof(char)));
+void sc_trace(sc_trace_file *, const sc_dt::uint64 *,
+              const std::string &, int width=(8 * sizeof(char)));
+
+template <class T>
+void
+sc_trace(sc_trace_file *, const sc_signal_in_if<T> &, const std::string &)
+{
+    sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+void sc_trace(sc_trace_file *, const sc_signal_in_if<char> &,
+              const std::string &, int width);
+
+void sc_trace(sc_trace_file *, const sc_signal_in_if<short> &,
+              const std::string &, int width);
+
+void sc_trace(sc_trace_file *, const sc_signal_in_if<int> &,
+              const std::string &, int width);
+
+void sc_trace(sc_trace_file *, const sc_signal_in_if<long> &,
+              const std::string &, int width);
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTIL_SC_TRACE_FILE_HH__
diff --git a/src/systemc/ext/utils/sc_vector.hh b/src/systemc/ext/utils/sc_vector.hh
new file mode 100644
index 000000000..073b17c88
--- /dev/null
+++ b/src/systemc/ext/utils/sc_vector.hh
@@ -0,0 +1,440 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
+#define __SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
+
+#include <stdint.h>
+
+#include <exception>
+#include <vector>
+
+#include "../core/sc_object.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+template <typename T, typename MT>
+class sc_vector_assembly;
+
+template <typename T>
+class sc_vector;
+
+template <typename T, typename MT>
+sc_vector_assembly<T, MT> sc_assemble_vector(
+        sc_vector<T> &, MT(T::* member_ptr));
+
+class sc_vector_base : public sc_object
+{
+  public:
+    typedef size_t size_type;
+
+    virtual const char *kind() const { return "sc_vector"; }
+    size_type size() const;
+    const std::vector<sc_object *> &get_elements() const;
+};
+
+template <typename T>
+class sc_vector_iter :
+        public std::iterator<std::random_access_iterator_tag, T>
+{
+    // Conforms to Random Access Iterator category.
+    // See ISO/IEC 14882:2003(E), 24.1 [lib.iterator.requirements]
+
+    // Implementation-defined
+};
+
+template <typename T>
+class sc_vector : public sc_vector_base
+{
+  public:
+    using sc_vector_base::size_type;
+    typedef sc_vector_iter<T> iterator;
+    typedef sc_vector_iter<const T> const_iterator;
+
+    sc_vector() : sc_vector_base()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+    explicit sc_vector(const char *) : sc_vector_base()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+    sc_vector(const char *, size_type) : sc_vector_base()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+    template <typename Creator>
+    sc_vector(const char *, size_type, Creator) : sc_vector_base()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+    virtual ~sc_vector() {}
+
+    void
+    init(size_type)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+    static T *
+    create_element(const char *, size_type)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return nullptr;
+    }
+
+    template <typename Creator>
+    void
+    init(size_type, Creator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+
+    T &
+    operator [] (size_type)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return *(T *)nullptr;
+    }
+    const T &
+    operator [] (size_type) const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return *(const T *)nullptr;
+    }
+
+    T &
+    at(size_type)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return *(T *)nullptr;
+    }
+    const T &
+    at(size_type) const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return *(const T *)nullptr;
+    }
+
+    iterator
+    begin()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+    iterator
+    end()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    const_iterator
+    begin() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return const_iterator();
+    }
+    const_iterator
+    end() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return const_iterator();
+    }
+
+    const_iterator
+    cbegin() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return const_iterator();
+    }
+    const_iterator
+    cend() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return const_iterator();
+    }
+
+    template <typename ContainerType, typename ArgumentType>
+    iterator
+    bind(sc_vector_assembly<ContainerType, ArgumentType>)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableContainer>
+    iterator
+    bind(BindableContainer &)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableIterator>
+    iterator
+    bind(BindableIterator, BindableIterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableIterator>
+    iterator
+    bind(BindableIterator, BindableIterator, iterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ContainerType, typename ArgumentType>
+    iterator
+    operator () (sc_vector_assembly<ContainerType, ArgumentType> c)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentContainer>
+    iterator
+    operator () (ArgumentContainer &)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentIterator>
+    iterator
+    operator () (ArgumentIterator, ArgumentIterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentIterator>
+    iterator
+    operator () (ArgumentIterator, ArgumentIterator, iterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+  private:
+    // Disabled
+    sc_vector(const sc_vector &) : sc_vector_base() {}
+    sc_vector &operator = (const sc_vector &) { return *this; }
+};
+
+template <typename T, typename MT>
+class sc_vector_assembly
+{
+  public:
+    friend sc_vector_assembly<T, MT> sc_assemble_vector<>(
+            sc_vector<T> &, MT(T::* member_ptr));
+
+    typedef size_t size_type;
+    // These next two types are supposed to be implementation defined. We'll
+    // just stick in a substitute for now, but these should probably not just
+    // be STL vector iterators.
+    typedef typename std::vector<T>::iterator iterator;
+    typedef typename std::vector<T>::const_iterator const_iterator;
+    typedef MT (T::* member_type);
+
+    sc_vector_assembly(const sc_vector_assembly &)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+
+    iterator
+    begin()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+    iterator
+    end()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    const_iterator
+    cbegin() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return const_iterator();
+    }
+    const_iterator
+    cend() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return const_iterator();
+    }
+
+    size_type
+    size() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return 0;
+    }
+    std::vector<sc_object *>
+    get_elements() const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return *(std::vector<sc_object *> *)nullptr;
+    }
+
+    typename iterator::reference
+    operator [] (size_type)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return typename iterator::reference();
+    }
+    typename const_iterator::reference
+    operator [] (size_type) const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return typename iterator::reference();
+    }
+
+    typename iterator::reference
+    at(size_type)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return typename iterator::reference();
+    }
+    typename const_iterator::reference
+    at(size_type) const
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return typename iterator::reference();
+    }
+
+    template <typename ContainerType, typename ArgumentType>
+    iterator
+    bind(sc_vector_assembly<ContainerType, ArgumentType>)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableContainer>
+    iterator
+    bind(BindableContainer &)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableIterator>
+    iterator
+    bind(BindableIterator, BindableIterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableIterator>
+    iterator
+    bind(BindableIterator, BindableIterator, iterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename BindableIterator>
+    iterator
+    bind(BindableIterator, BindableIterator, typename sc_vector<T>::iterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ContainerType, typename ArgumentType>
+    iterator
+    operator () (sc_vector_assembly<ContainerType, ArgumentType>)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentContainer>
+    iterator
+    operator () (ArgumentContainer &)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentIterator>
+    iterator
+    operator () (ArgumentIterator, ArgumentIterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentIterator>
+    iterator
+    operator () (ArgumentIterator, ArgumentIterator, iterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+    template <typename ArgumentIterator>
+    iterator
+    operator () (ArgumentIterator, ArgumentIterator,
+                 typename sc_vector<T>::iterator)
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+        return iterator();
+    }
+
+  private:
+    // Temporary constructor which will (eventually) actually bind an
+    // sc_vector_assembly instance to an sc_vector.
+    sc_vector_assembly<T, MT>()
+    {
+        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    }
+};
+
+template <typename T, typename MT>
+sc_vector_assembly<T, MT>
+sc_assemble_vector(sc_vector<T> &, MT(T::* member_ptr))
+{
+    sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
+    return sc_vector_assembly<T, MT>();
+}
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
diff --git a/src/systemc/ext/utils/warn_unimpl.hh b/src/systemc/ext/utils/warn_unimpl.hh
new file mode 100644
index 000000000..77873faaf
--- /dev/null
+++ b/src/systemc/ext/utils/warn_unimpl.hh
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_UTILS_WARN_UNIMPL_HH__
+#define __SYSTEMC_EXT_UTILS_WARN_UNIMPL_HH__
+
+namespace sc_core
+{
+
+void sc_utils_warn_unimpl(const char *func);
+
+} // namespace sc_core
+
+#endif  //__SYSTEMC_EXT_UTILS_WARN_UNIMPL_HH__
-- 
cgit v1.2.3