Esempio n. 1
0
template <class elem_t, class holder_t> tos_handle<elem_t>
adlist_tos_base<elem_t, holder_t>::handle_for_num(size_t position)
const
{
    if (position < 0)
        return build_handle(0);
    else if (position >= _cached_size)
        return build_handle(0);
    if (position < _index_size)
        return build_handle(_index[position]);
    if (_index_size == 0)
    {
        _index[0] = _head_e;
        typedef adlist_tos_base<elem_t, holder_t> *this_type;
        ++(CONST_CAST(this_type, this)->_index_size);
    }
    size_t total = _index_size - 1;
    holder_t *follow = _index[total];
    while (total < position)
    {
        ++total;
        follow = follow->next;
        _index[total] = follow;
    }
    return build_handle(follow);
}
Esempio n. 2
0
template <class elem_t, class holder_t> tos_handle<elem_t>
adlist_tos_base<elem_t, holder_t>::tail_handle(void) const
{
    if (_tail_e == 0)
        return build_handle(0);
    else
        return build_handle(_tail_e);
}
Esempio n. 3
0
template <class elem_t, class holder_t> tos_handle<elem_t>
adlist_tos_base<elem_t, holder_t>::previous_handle(
    tos_handle<elem_t> the_handle) const
{
    holder_t *elem_ptr = (holder_t *)(from_handle(the_handle));
    if (elem_ptr == 0)
        return build_handle(0);
    else
        return build_handle(elem_ptr->previous);
}
Esempio n. 4
0
template <class key_t, class elem_t> index_handle<key_t, elem_t>
        alist_index<key_t, elem_t>::lookup_handle(key_t the_key) const
  {
    tos_handle<alist_item<key_t, elem_t> > follow = _list.handle_for_num(0);
    while (!follow.is_null())
      {
        alist_item<key_t, elem_t> this_item = _list.elem(follow);
        if (this_item.the_key == the_key)
            return build_handle(follow.raw_referenced_item());
        follow = _list.next_handle(follow);
      }
    return build_handle(0);
  }
Esempio n. 5
0
template <class key_t, class elem_t> index_handle<key_t, elem_t>
        alist_index<key_t, elem_t>::enter(key_t the_key, elem_t the_elem)
  {
    assert(!exists(the_key));
    _list.prepend(alist_item<key_t, elem_t>(the_key, the_elem));
    return build_handle(_list.handle_for_num(0).raw_referenced_item());
  }
Esempio n. 6
0
template <class key_base_t, class elem_t> index_handle<key_base_t *, elem_t>
        ts_ptr_index<key_base_t, elem_t>::lookup_handle(key_base_t *the_key)
        const
  {
    char buffer[100];

    sprintf(buffer, "%p", the_key);
    index_handle<const char *, elem_t> tsi_handle = _tsi.lookup_handle(buffer);
    return build_handle(tsi_handle.raw_referenced_item());
  }
Esempio n. 7
0
template <class elem_t, class holder_t> tos_handle<elem_t>
adlist_tos_base<elem_t, holder_t>::lookup_handle(elem_t the_elem) const
{
    size_t total = 0;
    holder_t *follow = _head_e;
    while (follow != 0)
    {
        if (total >= _index_size)
        {
            _index[total] = follow;
            typedef adlist_tos_base<elem_t, holder_t> *this_type;
            ++(CONST_CAST(this_type, this)->_index_size);
        }
        if (follow->data == the_elem)
            return build_handle(follow);
        ++total;
        follow = follow->next;
    }
    return build_handle(0);
}