# Pointer Container Library

# Class `ptr_set_adapter`

This class is used to build custom pointer containers with an underlying set-like container. The interface of the class is an extension of the interface from `associative_ptr_container`.

Hierarchy:

- reversible_ptr_container
  - associative_ptr_container
    - `ptr_set_adapter`
    - ptr_multiset_adapter
    - ptr_map_adapter
    - ptr_multi_map_adapter
      - ptr_set
      - ptr_multi_set
      - ptr_map
      - ptr_multimap

Navigate:

- home
- reference

Synopsis:

    namespace boost
    {
        template
        <
            class Key,
            class VoidPtrSet,
            class CloneAllocator = heap_clone_allocator
        >
        class ptr_set_adapter
        {

        public: // modifiers
            std::pair<iterator,bool>  insert( Key* x );
            template< class Key2 >
            std::pair<iterator,bool>  insert( std::auto_ptr<Key2> x );

        public: // pointer container requirements
            bool      transfer( iterator object, ptr_set_adapter& from );
            size_type transfer( iterator first, iterator last, ptr_set_adapter& from );
            template< class Range >
            size_type transfer( const Range& r, ptr_set_adapter& from );
            size_type transfer( ptr_set_adapter& from );

        }; //  class 'ptr_set_adapter'

    } // namespace 'boost'

# Semantics

## Semantics: modifiers

- `std::pair<iterator,bool> insert( key_type* x );`

  > - Requirements: `x != 0`
  > - Effects: Takes ownership of `x` and insert it if there is no equivalent of it already. The `bool` part of the return value indicates insertion and the iterator points to the element with key `x`.
  > - Throws: bad_pointer if `x == 0`
  > - Exception safety: Strong guarantee

- `template< class Key2 > std::pair<iterator,bool> insert( std::auto_ptr<Key2> x );`

  > - Effects: `return insert( x.release() );`

## Semantics: pointer container requirements

- `bool transfer( iterator object, ptr_set_adapter& from );`

  > - Requirements: `not from.empty()`
  > - Effects: Inserts the object defined by `object` into the container and remove it from `from` iff no equivalent object exists.
  > - Returns: whether the object was transfered
  > - Exception safety: Strong guarantee

- `void transfer( iterator first, iterator last, ptr__set_adapter& from );`

  > - Requirements: `not from.empty()`
  > - Effects: Inserts the objects defined by the range `[first,last)` into the container and remove it from `from`. An object is only transferred if no equivalent object exists.
  > - Returns: the number of transfered objects
  > - Exception safety: Basic guarantee

- `template< class Range > void transfer( const Range& r, ptr_set_adapter& from );`

  > - Effects: `return transfer( boost::begin(r), boost::end(r), from );`

- `size_type transfer( ptr_set_adapter& from );`

  > - Effects: `return transfer( from.begin(), from.end(), from );`.

Copyright: | Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt).