#ifndef BAG6_H
#define BAG6_H

#include <cstdlib>
#include "bintree.h"

template <class Item>
class bag {
  public:
    typedef std::size_t size_type;
    typedef Item value_type;
    bag( );
    bag(const bag& source);
    ~bag( );
    size_type erase(const Item& target);
    bool erase_one(const Item& target);
    void insert(const Item& entry);
    void operator +=(const bag& addend);
    void operator =(const bag& source);
    size_type size( ) const;
    size_type count(const Item& target) const;
  private:
    binary_tree_node<Item> *root_ptr;
    void insert_all(binary_tree_node<Item>* addroot_ptr);
};

template <class Item>
bag<Item> operator +(const bag<Item>& b1, const bag<Item>& b2);

#include "bag6.cpp"

#endif