sc_vector.hh revision 12852
112852Sgabeblack@google.com/*
212852Sgabeblack@google.com * Copyright 2018 Google, Inc.
312852Sgabeblack@google.com *
412852Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without
512852Sgabeblack@google.com * modification, are permitted provided that the following conditions are
612852Sgabeblack@google.com * met: redistributions of source code must retain the above copyright
712852Sgabeblack@google.com * notice, this list of conditions and the following disclaimer;
812852Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright
912852Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the
1012852Sgabeblack@google.com * documentation and/or other materials provided with the distribution;
1112852Sgabeblack@google.com * neither the name of the copyright holders nor the names of its
1212852Sgabeblack@google.com * contributors may be used to endorse or promote products derived from
1312852Sgabeblack@google.com * this software without specific prior written permission.
1412852Sgabeblack@google.com *
1512852Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1612852Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1712852Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1812852Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1912852Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2012852Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2112852Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2212852Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2312852Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2412852Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2512852Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2612852Sgabeblack@google.com *
2712852Sgabeblack@google.com * Authors: Gabe Black
2812852Sgabeblack@google.com */
2912852Sgabeblack@google.com
3012852Sgabeblack@google.com#ifndef __SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
3112852Sgabeblack@google.com#define __SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
3212852Sgabeblack@google.com
3312852Sgabeblack@google.com#include <stdint.h>
3412852Sgabeblack@google.com
3512852Sgabeblack@google.com#include <exception>
3612852Sgabeblack@google.com#include <vector>
3712852Sgabeblack@google.com
3812852Sgabeblack@google.com#include "../core/sc_object.hh"
3912852Sgabeblack@google.com#include "warn_unimpl.hh"
4012852Sgabeblack@google.com
4112852Sgabeblack@google.comnamespace sc_core
4212852Sgabeblack@google.com{
4312852Sgabeblack@google.com
4412852Sgabeblack@google.comtemplate <typename T, typename MT>
4512852Sgabeblack@google.comclass sc_vector_assembly;
4612852Sgabeblack@google.com
4712852Sgabeblack@google.comtemplate <typename T>
4812852Sgabeblack@google.comclass sc_vector;
4912852Sgabeblack@google.com
5012852Sgabeblack@google.comtemplate <typename T, typename MT>
5112852Sgabeblack@google.comsc_vector_assembly<T, MT> sc_assemble_vector(
5212852Sgabeblack@google.com        sc_vector<T> &, MT(T::* member_ptr));
5312852Sgabeblack@google.com
5412852Sgabeblack@google.comclass sc_vector_base : public sc_object
5512852Sgabeblack@google.com{
5612852Sgabeblack@google.com  public:
5712852Sgabeblack@google.com    typedef size_t size_type;
5812852Sgabeblack@google.com
5912852Sgabeblack@google.com    virtual const char *kind() const { return "sc_vector"; }
6012852Sgabeblack@google.com    size_type size() const;
6112852Sgabeblack@google.com    const std::vector<sc_object *> &get_elements() const;
6212852Sgabeblack@google.com};
6312852Sgabeblack@google.com
6412852Sgabeblack@google.comtemplate <typename T>
6512852Sgabeblack@google.comclass sc_vector_iter :
6612852Sgabeblack@google.com        public std::iterator<std::random_access_iterator_tag, T>
6712852Sgabeblack@google.com{
6812852Sgabeblack@google.com    // Conforms to Random Access Iterator category.
6912852Sgabeblack@google.com    // See ISO/IEC 14882:2003(E), 24.1 [lib.iterator.requirements]
7012852Sgabeblack@google.com
7112852Sgabeblack@google.com    // Implementation-defined
7212852Sgabeblack@google.com};
7312852Sgabeblack@google.com
7412852Sgabeblack@google.comtemplate <typename T>
7512852Sgabeblack@google.comclass sc_vector : public sc_vector_base
7612852Sgabeblack@google.com{
7712852Sgabeblack@google.com  public:
7812852Sgabeblack@google.com    using sc_vector_base::size_type;
7912852Sgabeblack@google.com    typedef sc_vector_iter<T> iterator;
8012852Sgabeblack@google.com    typedef sc_vector_iter<const T> const_iterator;
8112852Sgabeblack@google.com
8212852Sgabeblack@google.com    sc_vector() : sc_vector_base()
8312852Sgabeblack@google.com    {
8412852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
8512852Sgabeblack@google.com    }
8612852Sgabeblack@google.com    explicit sc_vector(const char *) : sc_vector_base()
8712852Sgabeblack@google.com    {
8812852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
8912852Sgabeblack@google.com    }
9012852Sgabeblack@google.com    sc_vector(const char *, size_type) : sc_vector_base()
9112852Sgabeblack@google.com    {
9212852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
9312852Sgabeblack@google.com    }
9412852Sgabeblack@google.com    template <typename Creator>
9512852Sgabeblack@google.com    sc_vector(const char *, size_type, Creator) : sc_vector_base()
9612852Sgabeblack@google.com    {
9712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
9812852Sgabeblack@google.com    }
9912852Sgabeblack@google.com    virtual ~sc_vector() {}
10012852Sgabeblack@google.com
10112852Sgabeblack@google.com    void
10212852Sgabeblack@google.com    init(size_type)
10312852Sgabeblack@google.com    {
10412852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
10512852Sgabeblack@google.com    }
10612852Sgabeblack@google.com    static T *
10712852Sgabeblack@google.com    create_element(const char *, size_type)
10812852Sgabeblack@google.com    {
10912852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
11012852Sgabeblack@google.com        return nullptr;
11112852Sgabeblack@google.com    }
11212852Sgabeblack@google.com
11312852Sgabeblack@google.com    template <typename Creator>
11412852Sgabeblack@google.com    void
11512852Sgabeblack@google.com    init(size_type, Creator)
11612852Sgabeblack@google.com    {
11712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
11812852Sgabeblack@google.com    }
11912852Sgabeblack@google.com
12012852Sgabeblack@google.com    T &
12112852Sgabeblack@google.com    operator [] (size_type)
12212852Sgabeblack@google.com    {
12312852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
12412852Sgabeblack@google.com        return *(T *)nullptr;
12512852Sgabeblack@google.com    }
12612852Sgabeblack@google.com    const T &
12712852Sgabeblack@google.com    operator [] (size_type) const
12812852Sgabeblack@google.com    {
12912852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
13012852Sgabeblack@google.com        return *(const T *)nullptr;
13112852Sgabeblack@google.com    }
13212852Sgabeblack@google.com
13312852Sgabeblack@google.com    T &
13412852Sgabeblack@google.com    at(size_type)
13512852Sgabeblack@google.com    {
13612852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
13712852Sgabeblack@google.com        return *(T *)nullptr;
13812852Sgabeblack@google.com    }
13912852Sgabeblack@google.com    const T &
14012852Sgabeblack@google.com    at(size_type) const
14112852Sgabeblack@google.com    {
14212852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
14312852Sgabeblack@google.com        return *(const T *)nullptr;
14412852Sgabeblack@google.com    }
14512852Sgabeblack@google.com
14612852Sgabeblack@google.com    iterator
14712852Sgabeblack@google.com    begin()
14812852Sgabeblack@google.com    {
14912852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
15012852Sgabeblack@google.com        return iterator();
15112852Sgabeblack@google.com    }
15212852Sgabeblack@google.com    iterator
15312852Sgabeblack@google.com    end()
15412852Sgabeblack@google.com    {
15512852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
15612852Sgabeblack@google.com        return iterator();
15712852Sgabeblack@google.com    }
15812852Sgabeblack@google.com
15912852Sgabeblack@google.com    const_iterator
16012852Sgabeblack@google.com    begin() const
16112852Sgabeblack@google.com    {
16212852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
16312852Sgabeblack@google.com        return const_iterator();
16412852Sgabeblack@google.com    }
16512852Sgabeblack@google.com    const_iterator
16612852Sgabeblack@google.com    end() const
16712852Sgabeblack@google.com    {
16812852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
16912852Sgabeblack@google.com        return const_iterator();
17012852Sgabeblack@google.com    }
17112852Sgabeblack@google.com
17212852Sgabeblack@google.com    const_iterator
17312852Sgabeblack@google.com    cbegin() const
17412852Sgabeblack@google.com    {
17512852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
17612852Sgabeblack@google.com        return const_iterator();
17712852Sgabeblack@google.com    }
17812852Sgabeblack@google.com    const_iterator
17912852Sgabeblack@google.com    cend() const
18012852Sgabeblack@google.com    {
18112852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
18212852Sgabeblack@google.com        return const_iterator();
18312852Sgabeblack@google.com    }
18412852Sgabeblack@google.com
18512852Sgabeblack@google.com    template <typename ContainerType, typename ArgumentType>
18612852Sgabeblack@google.com    iterator
18712852Sgabeblack@google.com    bind(sc_vector_assembly<ContainerType, ArgumentType>)
18812852Sgabeblack@google.com    {
18912852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
19012852Sgabeblack@google.com        return iterator();
19112852Sgabeblack@google.com    }
19212852Sgabeblack@google.com
19312852Sgabeblack@google.com    template <typename BindableContainer>
19412852Sgabeblack@google.com    iterator
19512852Sgabeblack@google.com    bind(BindableContainer &)
19612852Sgabeblack@google.com    {
19712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
19812852Sgabeblack@google.com        return iterator();
19912852Sgabeblack@google.com    }
20012852Sgabeblack@google.com
20112852Sgabeblack@google.com    template <typename BindableIterator>
20212852Sgabeblack@google.com    iterator
20312852Sgabeblack@google.com    bind(BindableIterator, BindableIterator)
20412852Sgabeblack@google.com    {
20512852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
20612852Sgabeblack@google.com        return iterator();
20712852Sgabeblack@google.com    }
20812852Sgabeblack@google.com
20912852Sgabeblack@google.com    template <typename BindableIterator>
21012852Sgabeblack@google.com    iterator
21112852Sgabeblack@google.com    bind(BindableIterator, BindableIterator, iterator)
21212852Sgabeblack@google.com    {
21312852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
21412852Sgabeblack@google.com        return iterator();
21512852Sgabeblack@google.com    }
21612852Sgabeblack@google.com
21712852Sgabeblack@google.com    template <typename ContainerType, typename ArgumentType>
21812852Sgabeblack@google.com    iterator
21912852Sgabeblack@google.com    operator () (sc_vector_assembly<ContainerType, ArgumentType> c)
22012852Sgabeblack@google.com    {
22112852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
22212852Sgabeblack@google.com        return iterator();
22312852Sgabeblack@google.com    }
22412852Sgabeblack@google.com
22512852Sgabeblack@google.com    template <typename ArgumentContainer>
22612852Sgabeblack@google.com    iterator
22712852Sgabeblack@google.com    operator () (ArgumentContainer &)
22812852Sgabeblack@google.com    {
22912852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
23012852Sgabeblack@google.com        return iterator();
23112852Sgabeblack@google.com    }
23212852Sgabeblack@google.com
23312852Sgabeblack@google.com    template <typename ArgumentIterator>
23412852Sgabeblack@google.com    iterator
23512852Sgabeblack@google.com    operator () (ArgumentIterator, ArgumentIterator)
23612852Sgabeblack@google.com    {
23712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
23812852Sgabeblack@google.com        return iterator();
23912852Sgabeblack@google.com    }
24012852Sgabeblack@google.com
24112852Sgabeblack@google.com    template <typename ArgumentIterator>
24212852Sgabeblack@google.com    iterator
24312852Sgabeblack@google.com    operator () (ArgumentIterator, ArgumentIterator, iterator)
24412852Sgabeblack@google.com    {
24512852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
24612852Sgabeblack@google.com        return iterator();
24712852Sgabeblack@google.com    }
24812852Sgabeblack@google.com
24912852Sgabeblack@google.com  private:
25012852Sgabeblack@google.com    // Disabled
25112852Sgabeblack@google.com    sc_vector(const sc_vector &) : sc_vector_base() {}
25212852Sgabeblack@google.com    sc_vector &operator = (const sc_vector &) { return *this; }
25312852Sgabeblack@google.com};
25412852Sgabeblack@google.com
25512852Sgabeblack@google.comtemplate <typename T, typename MT>
25612852Sgabeblack@google.comclass sc_vector_assembly
25712852Sgabeblack@google.com{
25812852Sgabeblack@google.com  public:
25912852Sgabeblack@google.com    friend sc_vector_assembly<T, MT> sc_assemble_vector<>(
26012852Sgabeblack@google.com            sc_vector<T> &, MT(T::* member_ptr));
26112852Sgabeblack@google.com
26212852Sgabeblack@google.com    typedef size_t size_type;
26312852Sgabeblack@google.com    // These next two types are supposed to be implementation defined. We'll
26412852Sgabeblack@google.com    // just stick in a substitute for now, but these should probably not just
26512852Sgabeblack@google.com    // be STL vector iterators.
26612852Sgabeblack@google.com    typedef typename std::vector<T>::iterator iterator;
26712852Sgabeblack@google.com    typedef typename std::vector<T>::const_iterator const_iterator;
26812852Sgabeblack@google.com    typedef MT (T::* member_type);
26912852Sgabeblack@google.com
27012852Sgabeblack@google.com    sc_vector_assembly(const sc_vector_assembly &)
27112852Sgabeblack@google.com    {
27212852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
27312852Sgabeblack@google.com    }
27412852Sgabeblack@google.com
27512852Sgabeblack@google.com    iterator
27612852Sgabeblack@google.com    begin()
27712852Sgabeblack@google.com    {
27812852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
27912852Sgabeblack@google.com        return iterator();
28012852Sgabeblack@google.com    }
28112852Sgabeblack@google.com    iterator
28212852Sgabeblack@google.com    end()
28312852Sgabeblack@google.com    {
28412852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
28512852Sgabeblack@google.com        return iterator();
28612852Sgabeblack@google.com    }
28712852Sgabeblack@google.com
28812852Sgabeblack@google.com    const_iterator
28912852Sgabeblack@google.com    cbegin() const
29012852Sgabeblack@google.com    {
29112852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
29212852Sgabeblack@google.com        return const_iterator();
29312852Sgabeblack@google.com    }
29412852Sgabeblack@google.com    const_iterator
29512852Sgabeblack@google.com    cend() const
29612852Sgabeblack@google.com    {
29712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
29812852Sgabeblack@google.com        return const_iterator();
29912852Sgabeblack@google.com    }
30012852Sgabeblack@google.com
30112852Sgabeblack@google.com    size_type
30212852Sgabeblack@google.com    size() const
30312852Sgabeblack@google.com    {
30412852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
30512852Sgabeblack@google.com        return 0;
30612852Sgabeblack@google.com    }
30712852Sgabeblack@google.com    std::vector<sc_object *>
30812852Sgabeblack@google.com    get_elements() const
30912852Sgabeblack@google.com    {
31012852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
31112852Sgabeblack@google.com        return *(std::vector<sc_object *> *)nullptr;
31212852Sgabeblack@google.com    }
31312852Sgabeblack@google.com
31412852Sgabeblack@google.com    typename iterator::reference
31512852Sgabeblack@google.com    operator [] (size_type)
31612852Sgabeblack@google.com    {
31712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
31812852Sgabeblack@google.com        return typename iterator::reference();
31912852Sgabeblack@google.com    }
32012852Sgabeblack@google.com    typename const_iterator::reference
32112852Sgabeblack@google.com    operator [] (size_type) const
32212852Sgabeblack@google.com    {
32312852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
32412852Sgabeblack@google.com        return typename iterator::reference();
32512852Sgabeblack@google.com    }
32612852Sgabeblack@google.com
32712852Sgabeblack@google.com    typename iterator::reference
32812852Sgabeblack@google.com    at(size_type)
32912852Sgabeblack@google.com    {
33012852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
33112852Sgabeblack@google.com        return typename iterator::reference();
33212852Sgabeblack@google.com    }
33312852Sgabeblack@google.com    typename const_iterator::reference
33412852Sgabeblack@google.com    at(size_type) const
33512852Sgabeblack@google.com    {
33612852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
33712852Sgabeblack@google.com        return typename iterator::reference();
33812852Sgabeblack@google.com    }
33912852Sgabeblack@google.com
34012852Sgabeblack@google.com    template <typename ContainerType, typename ArgumentType>
34112852Sgabeblack@google.com    iterator
34212852Sgabeblack@google.com    bind(sc_vector_assembly<ContainerType, ArgumentType>)
34312852Sgabeblack@google.com    {
34412852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
34512852Sgabeblack@google.com        return iterator();
34612852Sgabeblack@google.com    }
34712852Sgabeblack@google.com
34812852Sgabeblack@google.com    template <typename BindableContainer>
34912852Sgabeblack@google.com    iterator
35012852Sgabeblack@google.com    bind(BindableContainer &)
35112852Sgabeblack@google.com    {
35212852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
35312852Sgabeblack@google.com        return iterator();
35412852Sgabeblack@google.com    }
35512852Sgabeblack@google.com
35612852Sgabeblack@google.com    template <typename BindableIterator>
35712852Sgabeblack@google.com    iterator
35812852Sgabeblack@google.com    bind(BindableIterator, BindableIterator)
35912852Sgabeblack@google.com    {
36012852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
36112852Sgabeblack@google.com        return iterator();
36212852Sgabeblack@google.com    }
36312852Sgabeblack@google.com
36412852Sgabeblack@google.com    template <typename BindableIterator>
36512852Sgabeblack@google.com    iterator
36612852Sgabeblack@google.com    bind(BindableIterator, BindableIterator, iterator)
36712852Sgabeblack@google.com    {
36812852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
36912852Sgabeblack@google.com        return iterator();
37012852Sgabeblack@google.com    }
37112852Sgabeblack@google.com
37212852Sgabeblack@google.com    template <typename BindableIterator>
37312852Sgabeblack@google.com    iterator
37412852Sgabeblack@google.com    bind(BindableIterator, BindableIterator, typename sc_vector<T>::iterator)
37512852Sgabeblack@google.com    {
37612852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
37712852Sgabeblack@google.com        return iterator();
37812852Sgabeblack@google.com    }
37912852Sgabeblack@google.com
38012852Sgabeblack@google.com    template <typename ContainerType, typename ArgumentType>
38112852Sgabeblack@google.com    iterator
38212852Sgabeblack@google.com    operator () (sc_vector_assembly<ContainerType, ArgumentType>)
38312852Sgabeblack@google.com    {
38412852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
38512852Sgabeblack@google.com        return iterator();
38612852Sgabeblack@google.com    }
38712852Sgabeblack@google.com
38812852Sgabeblack@google.com    template <typename ArgumentContainer>
38912852Sgabeblack@google.com    iterator
39012852Sgabeblack@google.com    operator () (ArgumentContainer &)
39112852Sgabeblack@google.com    {
39212852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
39312852Sgabeblack@google.com        return iterator();
39412852Sgabeblack@google.com    }
39512852Sgabeblack@google.com
39612852Sgabeblack@google.com    template <typename ArgumentIterator>
39712852Sgabeblack@google.com    iterator
39812852Sgabeblack@google.com    operator () (ArgumentIterator, ArgumentIterator)
39912852Sgabeblack@google.com    {
40012852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
40112852Sgabeblack@google.com        return iterator();
40212852Sgabeblack@google.com    }
40312852Sgabeblack@google.com
40412852Sgabeblack@google.com    template <typename ArgumentIterator>
40512852Sgabeblack@google.com    iterator
40612852Sgabeblack@google.com    operator () (ArgumentIterator, ArgumentIterator, iterator)
40712852Sgabeblack@google.com    {
40812852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
40912852Sgabeblack@google.com        return iterator();
41012852Sgabeblack@google.com    }
41112852Sgabeblack@google.com
41212852Sgabeblack@google.com    template <typename ArgumentIterator>
41312852Sgabeblack@google.com    iterator
41412852Sgabeblack@google.com    operator () (ArgumentIterator, ArgumentIterator,
41512852Sgabeblack@google.com                 typename sc_vector<T>::iterator)
41612852Sgabeblack@google.com    {
41712852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
41812852Sgabeblack@google.com        return iterator();
41912852Sgabeblack@google.com    }
42012852Sgabeblack@google.com
42112852Sgabeblack@google.com  private:
42212852Sgabeblack@google.com    // Temporary constructor which will (eventually) actually bind an
42312852Sgabeblack@google.com    // sc_vector_assembly instance to an sc_vector.
42412852Sgabeblack@google.com    sc_vector_assembly<T, MT>()
42512852Sgabeblack@google.com    {
42612852Sgabeblack@google.com        sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
42712852Sgabeblack@google.com    }
42812852Sgabeblack@google.com};
42912852Sgabeblack@google.com
43012852Sgabeblack@google.comtemplate <typename T, typename MT>
43112852Sgabeblack@google.comsc_vector_assembly<T, MT>
43212852Sgabeblack@google.comsc_assemble_vector(sc_vector<T> &, MT(T::* member_ptr))
43312852Sgabeblack@google.com{
43412852Sgabeblack@google.com    sc_utils_warn_unimpl(__PRETTY_FUNCTION__);
43512852Sgabeblack@google.com    return sc_vector_assembly<T, MT>();
43612852Sgabeblack@google.com}
43712852Sgabeblack@google.com
43812852Sgabeblack@google.com} // namespace sc_core
43912852Sgabeblack@google.com
44012852Sgabeblack@google.com#endif  //__SYSTEMC_EXT_UTIL_SC_VECTOR_HH__
441