sc_vector.hh revision 12852:300397457d0b
111730Sar4jc@virginia.edu/*
211730Sar4jc@virginia.edu * Copyright 2018 Google, Inc.
311730Sar4jc@virginia.edu *
411730Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without
511730Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are
611730Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright
711730Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer;
811730Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright
911730Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the
1011730Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution;
1111730Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its
1211730Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from
1311730Sar4jc@virginia.edu * this software without specific prior written permission.
1411730Sar4jc@virginia.edu *
1511730Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1611730Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1711730Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1811730Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1911730Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2011730Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2111730Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2211730Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2311730Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2411730Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2511730Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2611730Sar4jc@virginia.edu *
2711730Sar4jc@virginia.edu * Authors: Gabe Black
2811730Sar4jc@virginia.edu */
2911730Sar4jc@virginia.edu
3011730Sar4jc@virginia.edu#ifndef __SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
3111730Sar4jc@virginia.edu#define __SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
3211730Sar4jc@virginia.edu
3311730Sar4jc@virginia.edu#include <stdint.h>
3411730Sar4jc@virginia.edu
3511730Sar4jc@virginia.edu#include <exception>
3611730Sar4jc@virginia.edu#include <vector>
3711730Sar4jc@virginia.edu
3811730Sar4jc@virginia.edu#include "../core/sc_object.hh"
3911730Sar4jc@virginia.edu#include "warn_unimpl.hh"
4011730Sar4jc@virginia.edu
4111730Sar4jc@virginia.edunamespace sc_core
4211730Sar4jc@virginia.edu{
4311730Sar4jc@virginia.edu
4411730Sar4jc@virginia.edutemplate <typename T, typename MT>
4511730Sar4jc@virginia.educlass sc_vector_assembly;
4611730Sar4jc@virginia.edu
4711730Sar4jc@virginia.edutemplate <typename T>
4811730Sar4jc@virginia.educlass sc_vector;
4911730Sar4jc@virginia.edu
5011730Sar4jc@virginia.edutemplate <typename T, typename MT>
5111730Sar4jc@virginia.edusc_vector_assembly<T, MT> sc_assemble_vector(
5211730Sar4jc@virginia.edu        sc_vector<T> &, MT(T::* member_ptr));
5311730Sar4jc@virginia.edu
5411730Sar4jc@virginia.educlass sc_vector_base : public sc_object
5511730Sar4jc@virginia.edu{
5611730Sar4jc@virginia.edu  public:
5711730Sar4jc@virginia.edu    typedef size_t size_type;
5811730Sar4jc@virginia.edu
5911730Sar4jc@virginia.edu    virtual const char *kind() const { return "sc_vector"; }
6011730Sar4jc@virginia.edu    size_type size() const;
6111730Sar4jc@virginia.edu    const std::vector<sc_object *> &get_elements() const;
6211730Sar4jc@virginia.edu};
6311730Sar4jc@virginia.edu
6411730Sar4jc@virginia.edutemplate <typename T>
6511730Sar4jc@virginia.educlass sc_vector_iter :
6611730Sar4jc@virginia.edu        public std::iterator<std::random_access_iterator_tag, T>
6711730Sar4jc@virginia.edu{
6811730Sar4jc@virginia.edu    // Conforms to Random Access Iterator category.
6911730Sar4jc@virginia.edu    // See ISO/IEC 14882:2003(E), 24.1 [lib.iterator.requirements]
7011730Sar4jc@virginia.edu
7111730Sar4jc@virginia.edu    // Implementation-defined
7211730Sar4jc@virginia.edu};
7311730Sar4jc@virginia.edu
7411730Sar4jc@virginia.edutemplate <typename T>
7511730Sar4jc@virginia.educlass sc_vector : public sc_vector_base
7611730Sar4jc@virginia.edu{
7711730Sar4jc@virginia.edu  public:
7811730Sar4jc@virginia.edu    using sc_vector_base::size_type;
7911730Sar4jc@virginia.edu    typedef sc_vector_iter<T> iterator;
8011730Sar4jc@virginia.edu    typedef sc_vector_iter<const T> const_iterator;
8111730Sar4jc@virginia.edu
8211730Sar4jc@virginia.edu    sc_vector() : sc_vector_base()
8311730Sar4jc@virginia.edu    {
8411730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
8511730Sar4jc@virginia.edu    }
8611730Sar4jc@virginia.edu    explicit sc_vector(const char *) : sc_vector_base()
8711730Sar4jc@virginia.edu    {
8811730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
8911730Sar4jc@virginia.edu    }
9011730Sar4jc@virginia.edu    sc_vector(const char *, size_type) : sc_vector_base()
9111730Sar4jc@virginia.edu    {
9211730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
9311730Sar4jc@virginia.edu    }
9411730Sar4jc@virginia.edu    template <typename Creator>
9511730Sar4jc@virginia.edu    sc_vector(const char *, size_type, Creator) : sc_vector_base()
9611730Sar4jc@virginia.edu    {
9711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
9811730Sar4jc@virginia.edu    }
9911730Sar4jc@virginia.edu    virtual ~sc_vector() {}
10011730Sar4jc@virginia.edu
10111730Sar4jc@virginia.edu    void
10211730Sar4jc@virginia.edu    init(size_type)
10311730Sar4jc@virginia.edu    {
10411730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
10511730Sar4jc@virginia.edu    }
10611730Sar4jc@virginia.edu    static T *
10711730Sar4jc@virginia.edu    create_element(const char *, size_type)
10811730Sar4jc@virginia.edu    {
10911730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
11011730Sar4jc@virginia.edu        return nullptr;
11111730Sar4jc@virginia.edu    }
11211730Sar4jc@virginia.edu
11311730Sar4jc@virginia.edu    template <typename Creator>
11411730Sar4jc@virginia.edu    void
11511730Sar4jc@virginia.edu    init(size_type, Creator)
11611730Sar4jc@virginia.edu    {
11711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
11811730Sar4jc@virginia.edu    }
11911730Sar4jc@virginia.edu
12011730Sar4jc@virginia.edu    T &
12111730Sar4jc@virginia.edu    operator [] (size_type)
12211730Sar4jc@virginia.edu    {
12311730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
12411730Sar4jc@virginia.edu        return *(T *)nullptr;
12511730Sar4jc@virginia.edu    }
12611730Sar4jc@virginia.edu    const T &
12711730Sar4jc@virginia.edu    operator [] (size_type) const
12811730Sar4jc@virginia.edu    {
12911730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
13011730Sar4jc@virginia.edu        return *(const T *)nullptr;
13111730Sar4jc@virginia.edu    }
13211730Sar4jc@virginia.edu
13311730Sar4jc@virginia.edu    T &
13411730Sar4jc@virginia.edu    at(size_type)
13511730Sar4jc@virginia.edu    {
13611730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
13711730Sar4jc@virginia.edu        return *(T *)nullptr;
13811730Sar4jc@virginia.edu    }
13911730Sar4jc@virginia.edu    const T &
14011730Sar4jc@virginia.edu    at(size_type) const
14111730Sar4jc@virginia.edu    {
14211730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
14311730Sar4jc@virginia.edu        return *(const T *)nullptr;
14411730Sar4jc@virginia.edu    }
14511730Sar4jc@virginia.edu
14611730Sar4jc@virginia.edu    iterator
14711730Sar4jc@virginia.edu    begin()
14811730Sar4jc@virginia.edu    {
14911730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
15011730Sar4jc@virginia.edu        return iterator();
15111730Sar4jc@virginia.edu    }
15211730Sar4jc@virginia.edu    iterator
15311730Sar4jc@virginia.edu    end()
15411730Sar4jc@virginia.edu    {
15511730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
15611730Sar4jc@virginia.edu        return iterator();
15711730Sar4jc@virginia.edu    }
15811730Sar4jc@virginia.edu
15911730Sar4jc@virginia.edu    const_iterator
16011730Sar4jc@virginia.edu    begin() const
16111730Sar4jc@virginia.edu    {
16211730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
16311730Sar4jc@virginia.edu        return const_iterator();
16411730Sar4jc@virginia.edu    }
16511730Sar4jc@virginia.edu    const_iterator
16611730Sar4jc@virginia.edu    end() const
16711730Sar4jc@virginia.edu    {
16811730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
16911730Sar4jc@virginia.edu        return const_iterator();
17011730Sar4jc@virginia.edu    }
17111730Sar4jc@virginia.edu
17211730Sar4jc@virginia.edu    const_iterator
17311730Sar4jc@virginia.edu    cbegin() const
17411730Sar4jc@virginia.edu    {
17511730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
17611730Sar4jc@virginia.edu        return const_iterator();
17711730Sar4jc@virginia.edu    }
17811730Sar4jc@virginia.edu    const_iterator
17911730Sar4jc@virginia.edu    cend() const
18011730Sar4jc@virginia.edu    {
18111730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
18211730Sar4jc@virginia.edu        return const_iterator();
18311730Sar4jc@virginia.edu    }
18411730Sar4jc@virginia.edu
18511730Sar4jc@virginia.edu    template <typename ContainerType, typename ArgumentType>
18611730Sar4jc@virginia.edu    iterator
18711730Sar4jc@virginia.edu    bind(sc_vector_assembly<ContainerType, ArgumentType>)
18811730Sar4jc@virginia.edu    {
18911730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
19011730Sar4jc@virginia.edu        return iterator();
19111730Sar4jc@virginia.edu    }
19211730Sar4jc@virginia.edu
19311730Sar4jc@virginia.edu    template <typename BindableContainer>
19411730Sar4jc@virginia.edu    iterator
19511730Sar4jc@virginia.edu    bind(BindableContainer &)
19611730Sar4jc@virginia.edu    {
19711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
19811730Sar4jc@virginia.edu        return iterator();
19911730Sar4jc@virginia.edu    }
20011730Sar4jc@virginia.edu
20111730Sar4jc@virginia.edu    template <typename BindableIterator>
20211730Sar4jc@virginia.edu    iterator
20311730Sar4jc@virginia.edu    bind(BindableIterator, BindableIterator)
20411730Sar4jc@virginia.edu    {
20511730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
20611730Sar4jc@virginia.edu        return iterator();
20711730Sar4jc@virginia.edu    }
20811730Sar4jc@virginia.edu
20911730Sar4jc@virginia.edu    template <typename BindableIterator>
21011730Sar4jc@virginia.edu    iterator
21111730Sar4jc@virginia.edu    bind(BindableIterator, BindableIterator, iterator)
21211730Sar4jc@virginia.edu    {
21311730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
21411730Sar4jc@virginia.edu        return iterator();
21511730Sar4jc@virginia.edu    }
21611730Sar4jc@virginia.edu
21711730Sar4jc@virginia.edu    template <typename ContainerType, typename ArgumentType>
21811730Sar4jc@virginia.edu    iterator
21911730Sar4jc@virginia.edu    operator () (sc_vector_assembly<ContainerType, ArgumentType> c)
22011730Sar4jc@virginia.edu    {
22111730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
22211730Sar4jc@virginia.edu        return iterator();
22311730Sar4jc@virginia.edu    }
22411730Sar4jc@virginia.edu
22511730Sar4jc@virginia.edu    template <typename ArgumentContainer>
22611730Sar4jc@virginia.edu    iterator
22711730Sar4jc@virginia.edu    operator () (ArgumentContainer &)
22811730Sar4jc@virginia.edu    {
22911730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
23011730Sar4jc@virginia.edu        return iterator();
23111730Sar4jc@virginia.edu    }
23211730Sar4jc@virginia.edu
23311730Sar4jc@virginia.edu    template <typename ArgumentIterator>
23411730Sar4jc@virginia.edu    iterator
23511730Sar4jc@virginia.edu    operator () (ArgumentIterator, ArgumentIterator)
23611730Sar4jc@virginia.edu    {
23711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
23811730Sar4jc@virginia.edu        return iterator();
23911730Sar4jc@virginia.edu    }
24011730Sar4jc@virginia.edu
24111730Sar4jc@virginia.edu    template <typename ArgumentIterator>
24211730Sar4jc@virginia.edu    iterator
24311730Sar4jc@virginia.edu    operator () (ArgumentIterator, ArgumentIterator, iterator)
24411730Sar4jc@virginia.edu    {
24511730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
24611730Sar4jc@virginia.edu        return iterator();
24711730Sar4jc@virginia.edu    }
24811730Sar4jc@virginia.edu
24911730Sar4jc@virginia.edu  private:
25011730Sar4jc@virginia.edu    // Disabled
25111730Sar4jc@virginia.edu    sc_vector(const sc_vector &) : sc_vector_base() {}
25211730Sar4jc@virginia.edu    sc_vector &operator = (const sc_vector &) { return *this; }
25311730Sar4jc@virginia.edu};
25411730Sar4jc@virginia.edu
25511730Sar4jc@virginia.edutemplate <typename T, typename MT>
25611730Sar4jc@virginia.educlass sc_vector_assembly
25711730Sar4jc@virginia.edu{
25811730Sar4jc@virginia.edu  public:
25911730Sar4jc@virginia.edu    friend sc_vector_assembly<T, MT> sc_assemble_vector<>(
26011730Sar4jc@virginia.edu            sc_vector<T> &, MT(T::* member_ptr));
26111730Sar4jc@virginia.edu
26211730Sar4jc@virginia.edu    typedef size_t size_type;
26311730Sar4jc@virginia.edu    // These next two types are supposed to be implementation defined. We'll
26411730Sar4jc@virginia.edu    // just stick in a substitute for now, but these should probably not just
26511730Sar4jc@virginia.edu    // be STL vector iterators.
26611730Sar4jc@virginia.edu    typedef typename std::vector<T>::iterator iterator;
26711730Sar4jc@virginia.edu    typedef typename std::vector<T>::const_iterator const_iterator;
26811730Sar4jc@virginia.edu    typedef MT (T::* member_type);
26911730Sar4jc@virginia.edu
27011730Sar4jc@virginia.edu    sc_vector_assembly(const sc_vector_assembly &)
27111730Sar4jc@virginia.edu    {
27211730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
27311730Sar4jc@virginia.edu    }
27411730Sar4jc@virginia.edu
27511730Sar4jc@virginia.edu    iterator
27611730Sar4jc@virginia.edu    begin()
27711730Sar4jc@virginia.edu    {
27811730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
27911730Sar4jc@virginia.edu        return iterator();
28011730Sar4jc@virginia.edu    }
28111730Sar4jc@virginia.edu    iterator
28211730Sar4jc@virginia.edu    end()
28311730Sar4jc@virginia.edu    {
28411730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
28511730Sar4jc@virginia.edu        return iterator();
28611730Sar4jc@virginia.edu    }
28711730Sar4jc@virginia.edu
28811730Sar4jc@virginia.edu    const_iterator
28911730Sar4jc@virginia.edu    cbegin() const
29011730Sar4jc@virginia.edu    {
29111730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
29211730Sar4jc@virginia.edu        return const_iterator();
29311730Sar4jc@virginia.edu    }
29411730Sar4jc@virginia.edu    const_iterator
29511730Sar4jc@virginia.edu    cend() const
29611730Sar4jc@virginia.edu    {
29711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
29811730Sar4jc@virginia.edu        return const_iterator();
29911730Sar4jc@virginia.edu    }
30011730Sar4jc@virginia.edu
30111730Sar4jc@virginia.edu    size_type
30211730Sar4jc@virginia.edu    size() const
30311730Sar4jc@virginia.edu    {
30411730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
30511730Sar4jc@virginia.edu        return 0;
30611730Sar4jc@virginia.edu    }
30711730Sar4jc@virginia.edu    std::vector<sc_object *>
30811730Sar4jc@virginia.edu    get_elements() const
30911730Sar4jc@virginia.edu    {
31011730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
31111730Sar4jc@virginia.edu        return *(std::vector<sc_object *> *)nullptr;
31211730Sar4jc@virginia.edu    }
31311730Sar4jc@virginia.edu
31411730Sar4jc@virginia.edu    typename iterator::reference
31511730Sar4jc@virginia.edu    operator [] (size_type)
31611730Sar4jc@virginia.edu    {
31711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
31811730Sar4jc@virginia.edu        return typename iterator::reference();
31911730Sar4jc@virginia.edu    }
32011730Sar4jc@virginia.edu    typename const_iterator::reference
32111730Sar4jc@virginia.edu    operator [] (size_type) const
32211730Sar4jc@virginia.edu    {
32311730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
32411730Sar4jc@virginia.edu        return typename iterator::reference();
32511730Sar4jc@virginia.edu    }
32611730Sar4jc@virginia.edu
32711730Sar4jc@virginia.edu    typename iterator::reference
32811730Sar4jc@virginia.edu    at(size_type)
32911730Sar4jc@virginia.edu    {
33011730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
33111730Sar4jc@virginia.edu        return typename iterator::reference();
33211730Sar4jc@virginia.edu    }
33311730Sar4jc@virginia.edu    typename const_iterator::reference
33411730Sar4jc@virginia.edu    at(size_type) const
33511730Sar4jc@virginia.edu    {
33611730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
33711730Sar4jc@virginia.edu        return typename iterator::reference();
33811730Sar4jc@virginia.edu    }
33911730Sar4jc@virginia.edu
34011730Sar4jc@virginia.edu    template <typename ContainerType, typename ArgumentType>
34111730Sar4jc@virginia.edu    iterator
34211730Sar4jc@virginia.edu    bind(sc_vector_assembly<ContainerType, ArgumentType>)
34311730Sar4jc@virginia.edu    {
34411730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
34511730Sar4jc@virginia.edu        return iterator();
34611730Sar4jc@virginia.edu    }
34711730Sar4jc@virginia.edu
34811730Sar4jc@virginia.edu    template <typename BindableContainer>
34911730Sar4jc@virginia.edu    iterator
35011730Sar4jc@virginia.edu    bind(BindableContainer &)
35111730Sar4jc@virginia.edu    {
35211730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
35311730Sar4jc@virginia.edu        return iterator();
35411730Sar4jc@virginia.edu    }
35511730Sar4jc@virginia.edu
35611730Sar4jc@virginia.edu    template <typename BindableIterator>
35711730Sar4jc@virginia.edu    iterator
35811730Sar4jc@virginia.edu    bind(BindableIterator, BindableIterator)
35911730Sar4jc@virginia.edu    {
36011730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
36111730Sar4jc@virginia.edu        return iterator();
36211730Sar4jc@virginia.edu    }
36311730Sar4jc@virginia.edu
36411730Sar4jc@virginia.edu    template <typename BindableIterator>
36511730Sar4jc@virginia.edu    iterator
36611730Sar4jc@virginia.edu    bind(BindableIterator, BindableIterator, iterator)
36711730Sar4jc@virginia.edu    {
36811730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
36911730Sar4jc@virginia.edu        return iterator();
37011730Sar4jc@virginia.edu    }
37111730Sar4jc@virginia.edu
37211730Sar4jc@virginia.edu    template <typename BindableIterator>
37311730Sar4jc@virginia.edu    iterator
37411730Sar4jc@virginia.edu    bind(BindableIterator, BindableIterator, typename sc_vector<T>::iterator)
37511730Sar4jc@virginia.edu    {
37611730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
37711730Sar4jc@virginia.edu        return iterator();
37811730Sar4jc@virginia.edu    }
37911730Sar4jc@virginia.edu
38011730Sar4jc@virginia.edu    template <typename ContainerType, typename ArgumentType>
38111730Sar4jc@virginia.edu    iterator
38211730Sar4jc@virginia.edu    operator () (sc_vector_assembly<ContainerType, ArgumentType>)
38311730Sar4jc@virginia.edu    {
38411730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
38511730Sar4jc@virginia.edu        return iterator();
38611730Sar4jc@virginia.edu    }
38711730Sar4jc@virginia.edu
38811730Sar4jc@virginia.edu    template <typename ArgumentContainer>
38911730Sar4jc@virginia.edu    iterator
39011730Sar4jc@virginia.edu    operator () (ArgumentContainer &)
39111730Sar4jc@virginia.edu    {
39211730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
39311730Sar4jc@virginia.edu        return iterator();
39411730Sar4jc@virginia.edu    }
39511730Sar4jc@virginia.edu
39611730Sar4jc@virginia.edu    template <typename ArgumentIterator>
39711730Sar4jc@virginia.edu    iterator
39811730Sar4jc@virginia.edu    operator () (ArgumentIterator, ArgumentIterator)
39911730Sar4jc@virginia.edu    {
40011730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
40111730Sar4jc@virginia.edu        return iterator();
40211730Sar4jc@virginia.edu    }
40311730Sar4jc@virginia.edu
40411730Sar4jc@virginia.edu    template <typename ArgumentIterator>
40511730Sar4jc@virginia.edu    iterator
40611730Sar4jc@virginia.edu    operator () (ArgumentIterator, ArgumentIterator, iterator)
40711730Sar4jc@virginia.edu    {
40811730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
40911730Sar4jc@virginia.edu        return iterator();
41011730Sar4jc@virginia.edu    }
41111730Sar4jc@virginia.edu
41211730Sar4jc@virginia.edu    template <typename ArgumentIterator>
41311730Sar4jc@virginia.edu    iterator
41411730Sar4jc@virginia.edu    operator () (ArgumentIterator, ArgumentIterator,
41511730Sar4jc@virginia.edu                 typename sc_vector<T>::iterator)
41611730Sar4jc@virginia.edu    {
41711730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
41811730Sar4jc@virginia.edu        return iterator();
41911730Sar4jc@virginia.edu    }
42011730Sar4jc@virginia.edu
42111730Sar4jc@virginia.edu  private:
42211730Sar4jc@virginia.edu    // Temporary constructor which will (eventually) actually bind an
42311730Sar4jc@virginia.edu    // sc_vector_assembly instance to an sc_vector.
42411730Sar4jc@virginia.edu    sc_vector_assembly<T, MT>()
42511730Sar4jc@virginia.edu    {
42611730Sar4jc@virginia.edu        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
42711730Sar4jc@virginia.edu    }
42811730Sar4jc@virginia.edu};
42911730Sar4jc@virginia.edu
43011730Sar4jc@virginia.edutemplate <typename T, typename MT>
43111730Sar4jc@virginia.edusc_vector_assembly<T, MT>
43211730Sar4jc@virginia.edusc_assemble_vector(sc_vector<T> &, MT(T::* member_ptr))
43311730Sar4jc@virginia.edu{
43411730Sar4jc@virginia.edu    sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
43511730Sar4jc@virginia.edu    return sc_vector_assembly<T, MT>();
43611730Sar4jc@virginia.edu}
43711730Sar4jc@virginia.edu
43811730Sar4jc@virginia.edu} // namespace sc_core
43911730Sar4jc@virginia.edu
44011730Sar4jc@virginia.edu#endif  //__SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
441