112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de  sc_list.h -- Simple implementation of a doubly linked list.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Stan Y. Liao, Synopsys, Inc.
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de  CHANGE LOG AT END OF FILE
2712027Sjungma@eit.uni-kl.de *****************************************************************************/
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de
3012027Sjungma@eit.uni-kl.de#ifndef SC_LIST_H
3112027Sjungma@eit.uni-kl.de#define SC_LIST_H
3212027Sjungma@eit.uni-kl.de
3312027Sjungma@eit.uni-kl.denamespace sc_core {
3412027Sjungma@eit.uni-kl.de
3512027Sjungma@eit.uni-kl.de//Some forward declarations
3612027Sjungma@eit.uni-kl.declass sc_plist_elem;
3712027Sjungma@eit.uni-kl.detemplate<class T> class sc_plist_iter;
3812027Sjungma@eit.uni-kl.de
3912027Sjungma@eit.uni-kl.detypedef void (*sc_plist_map_fn)( void* data, void* arg );
4012027Sjungma@eit.uni-kl.de
4112027Sjungma@eit.uni-kl.declass sc_plist_base {
4212027Sjungma@eit.uni-kl.de    friend class sc_plist_base_iter;
4312027Sjungma@eit.uni-kl.de
4412027Sjungma@eit.uni-kl.depublic:
4512027Sjungma@eit.uni-kl.de    sc_plist_base();
4612027Sjungma@eit.uni-kl.de    ~sc_plist_base();
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.de    typedef sc_plist_elem* handle_t;
4912027Sjungma@eit.uni-kl.de
5012027Sjungma@eit.uni-kl.de    handle_t push_back(void* d);
5112027Sjungma@eit.uni-kl.de    handle_t push_front(void* d);
5212027Sjungma@eit.uni-kl.de    void* pop_back();
5312027Sjungma@eit.uni-kl.de    void* pop_front();
5412027Sjungma@eit.uni-kl.de    handle_t insert_before(handle_t h, void* d);
5512027Sjungma@eit.uni-kl.de    handle_t insert_after(handle_t h, void* d);
5612027Sjungma@eit.uni-kl.de    void* remove(handle_t h);
5712027Sjungma@eit.uni-kl.de    void* get(handle_t h) const;
5812027Sjungma@eit.uni-kl.de    void set(handle_t h, void* d);
5912027Sjungma@eit.uni-kl.de    void mapcar( sc_plist_map_fn f, void* arg );
6012027Sjungma@eit.uni-kl.de
6112027Sjungma@eit.uni-kl.de    void* front() const;
6212027Sjungma@eit.uni-kl.de    void* back() const;
6312027Sjungma@eit.uni-kl.de
6412027Sjungma@eit.uni-kl.de    void erase_all();
6512027Sjungma@eit.uni-kl.de    bool empty() const { return (head == 0); }
6612027Sjungma@eit.uni-kl.de    int size() const;
6712027Sjungma@eit.uni-kl.de
6812027Sjungma@eit.uni-kl.deprivate:
6912027Sjungma@eit.uni-kl.de    handle_t head;
7012027Sjungma@eit.uni-kl.de    handle_t tail;
7112027Sjungma@eit.uni-kl.de};
7212027Sjungma@eit.uni-kl.de
7312027Sjungma@eit.uni-kl.de
7412027Sjungma@eit.uni-kl.declass sc_plist_base_iter {
7512027Sjungma@eit.uni-kl.depublic:
7612027Sjungma@eit.uni-kl.de    typedef sc_plist_elem* handle_t;
7712027Sjungma@eit.uni-kl.de
7812027Sjungma@eit.uni-kl.de    sc_plist_base_iter( sc_plist_base* l, bool from_tail = false );
7912027Sjungma@eit.uni-kl.de    ~sc_plist_base_iter();
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.de    void reset( sc_plist_base* l, bool from_tail = false );
8212027Sjungma@eit.uni-kl.de    bool empty() const;
8312027Sjungma@eit.uni-kl.de    void operator++(int);
8412027Sjungma@eit.uni-kl.de    void operator--(int);
8512027Sjungma@eit.uni-kl.de    void* get() const;
8612027Sjungma@eit.uni-kl.de    void  set(void* d);
8712027Sjungma@eit.uni-kl.de    void remove();
8812027Sjungma@eit.uni-kl.de    void remove(int direction);
8912027Sjungma@eit.uni-kl.de
9012027Sjungma@eit.uni-kl.de    void set_handle(handle_t h);
9112027Sjungma@eit.uni-kl.de    handle_t get_handle() const { return ptr; }
9212027Sjungma@eit.uni-kl.de
9312027Sjungma@eit.uni-kl.deprivate:
9412027Sjungma@eit.uni-kl.de    sc_plist_base* lst;
9512027Sjungma@eit.uni-kl.de    sc_plist_elem* ptr;
9612027Sjungma@eit.uni-kl.de};
9712027Sjungma@eit.uni-kl.de
9812027Sjungma@eit.uni-kl.de/*---------------------------------------------------------------------------*/
9912027Sjungma@eit.uni-kl.de
10012027Sjungma@eit.uni-kl.detemplate< class T >
10112027Sjungma@eit.uni-kl.declass sc_plist : public sc_plist_base {
10212027Sjungma@eit.uni-kl.de    friend class sc_plist_iter <T>;
10312027Sjungma@eit.uni-kl.de
10412027Sjungma@eit.uni-kl.depublic:
10512027Sjungma@eit.uni-kl.de    typedef sc_plist_iter<T> iterator;
10612027Sjungma@eit.uni-kl.de
10712027Sjungma@eit.uni-kl.de    sc_plist() { }
10812027Sjungma@eit.uni-kl.de    ~sc_plist() { }
10912027Sjungma@eit.uni-kl.de
11012027Sjungma@eit.uni-kl.de    handle_t push_back(T d)  { return sc_plist_base::push_back((void*)d);  }
11112027Sjungma@eit.uni-kl.de    handle_t push_front(T d) { return sc_plist_base::push_front((void*)d); }
11212027Sjungma@eit.uni-kl.de    T pop_back()           { return (T) sc_plist_base::pop_back(); }
11312027Sjungma@eit.uni-kl.de    T pop_front()          { return (T) sc_plist_base::pop_front(); }
11412027Sjungma@eit.uni-kl.de    handle_t insert_before(handle_t h, T d)
11512027Sjungma@eit.uni-kl.de    {
11612027Sjungma@eit.uni-kl.de        return sc_plist_base::insert_before(h, (void*) d);
11712027Sjungma@eit.uni-kl.de    }
11812027Sjungma@eit.uni-kl.de    handle_t insert_after(handle_t h, T d)
11912027Sjungma@eit.uni-kl.de    {
12012027Sjungma@eit.uni-kl.de        return sc_plist_base::insert_after(h, (void*) d);
12112027Sjungma@eit.uni-kl.de    }
12212027Sjungma@eit.uni-kl.de    T remove(handle_t h)
12312027Sjungma@eit.uni-kl.de    {
12412027Sjungma@eit.uni-kl.de        return (T)sc_plist_base::remove(h);
12512027Sjungma@eit.uni-kl.de    }
12612027Sjungma@eit.uni-kl.de    T get(handle_t h) const { return (T)sc_plist_base::get(h); }
12712027Sjungma@eit.uni-kl.de    void set(handle_t h, T d) { sc_plist_base::set(h, (void*)d); }
12812027Sjungma@eit.uni-kl.de
12912027Sjungma@eit.uni-kl.de    T front() const { return (T)sc_plist_base::front(); }
13012027Sjungma@eit.uni-kl.de    T back() const { return (T)sc_plist_base::back(); }
13112027Sjungma@eit.uni-kl.de};
13212027Sjungma@eit.uni-kl.de
13312027Sjungma@eit.uni-kl.detemplate< class T >
13412027Sjungma@eit.uni-kl.declass sc_plist_iter : public sc_plist_base_iter {
13512027Sjungma@eit.uni-kl.depublic:
13612027Sjungma@eit.uni-kl.de    sc_plist_iter( sc_plist<T>* l, bool from_tail = false )
13712027Sjungma@eit.uni-kl.de        : sc_plist_base_iter( l, from_tail )
13812027Sjungma@eit.uni-kl.de    {
13912027Sjungma@eit.uni-kl.de
14012027Sjungma@eit.uni-kl.de    }
14112027Sjungma@eit.uni-kl.de    sc_plist_iter( sc_plist<T>& l, bool from_tail = false )
14212027Sjungma@eit.uni-kl.de        : sc_plist_base_iter( &l, from_tail )
14312027Sjungma@eit.uni-kl.de    {
14412027Sjungma@eit.uni-kl.de
14512027Sjungma@eit.uni-kl.de    }
14612027Sjungma@eit.uni-kl.de    ~sc_plist_iter()
14712027Sjungma@eit.uni-kl.de    {
14812027Sjungma@eit.uni-kl.de
14912027Sjungma@eit.uni-kl.de    }
15012027Sjungma@eit.uni-kl.de
15112027Sjungma@eit.uni-kl.de    void reset( sc_plist<T>* l, bool from_tail = false )
15212027Sjungma@eit.uni-kl.de    {
15312027Sjungma@eit.uni-kl.de        sc_plist_base_iter::reset( l, from_tail );
15412027Sjungma@eit.uni-kl.de    }
15512027Sjungma@eit.uni-kl.de    void reset( sc_plist<T>& l, bool from_tail = false )
15612027Sjungma@eit.uni-kl.de    {
15712027Sjungma@eit.uni-kl.de        sc_plist_base_iter::reset( &l, from_tail );
15812027Sjungma@eit.uni-kl.de    }
15912027Sjungma@eit.uni-kl.de
16012027Sjungma@eit.uni-kl.de    T operator*() const { return (T) sc_plist_base_iter::get(); }
16112027Sjungma@eit.uni-kl.de    T get() const     { return (T) sc_plist_base_iter::get(); }
16212027Sjungma@eit.uni-kl.de    void set(T d)     { sc_plist_base_iter::set((void*) d); }
16312027Sjungma@eit.uni-kl.de};
16412027Sjungma@eit.uni-kl.de
16512027Sjungma@eit.uni-kl.de} // namespace sc_core
16612027Sjungma@eit.uni-kl.de
16712027Sjungma@eit.uni-kl.de// $Log: sc_list.h,v $
16812027Sjungma@eit.uni-kl.de// Revision 1.5  2011/09/01 15:16:50  acg
16912027Sjungma@eit.uni-kl.de//  Philipp A. Hartmann: revert unnecessary virtual destructors.
17012027Sjungma@eit.uni-kl.de//
17112027Sjungma@eit.uni-kl.de// Revision 1.4  2011/08/26 20:46:18  acg
17212027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
17312027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
17412027Sjungma@eit.uni-kl.de//
17512027Sjungma@eit.uni-kl.de// Revision 1.3  2011/08/24 22:05:56  acg
17612027Sjungma@eit.uni-kl.de//  Torsten Maehne: initialization changes to remove warnings.
17712027Sjungma@eit.uni-kl.de//
17812027Sjungma@eit.uni-kl.de// Revision 1.2  2011/02/18 20:38:44  acg
17912027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyright notice.
18012027Sjungma@eit.uni-kl.de//
18112027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:06  acg
18212027Sjungma@eit.uni-kl.de// SystemC 2.3
18312027Sjungma@eit.uni-kl.de//
18412027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:53:10  acg
18512027Sjungma@eit.uni-kl.de// Andy Goodrich: Added $Log command so that CVS comments are reproduced in
18612027Sjungma@eit.uni-kl.de// the source.
18712027Sjungma@eit.uni-kl.de
18812027Sjungma@eit.uni-kl.de#endif
189