my initial idea does not work - full copy on shift in, reference on shift out; refs #6
This commit is contained in:
		@@ -49,21 +49,12 @@
 | 
			
		||||
    @param o a value to be inserted into deque @c l
 | 
			
		||||
    @pre \#include <mrw/deque.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::deque<T, A> operator<<(std::deque<T, A> l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.push_back(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::deque<T, A>&& operator<<(std::deque<T, A>&& l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.push_back(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @brief extract the first value of a deque
 | 
			
		||||
 | 
			
		||||
@@ -83,9 +74,8 @@ template <typename T, typename A>
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre \#include <mrw/deque.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::deque<T, A> operator>>(std::deque<T, A> l, T& o)
 | 
			
		||||
    std::deque<T, A>& operator>>(std::deque<T, A>& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::deque<T, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
@@ -96,20 +86,6 @@ template <typename T, typename A>
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::deque<T, A>&& operator>>(std::deque<T, A>&& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::deque<T, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
    throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                            ": std::deque<>& operator>>(std::deque<>&, T&),"
 | 
			
		||||
                            " deque is empty");
 | 
			
		||||
  o = *it;
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
//@}
 | 
			
		||||
 
 | 
			
		||||
@@ -67,14 +67,8 @@
 | 
			
		||||
    @param o a value to be inserted into list @c l
 | 
			
		||||
    @pre \#include <mrw/list.hxx>
 | 
			
		||||
*/
 | 
			
		||||
// template <typename T, typename A, typename FROM>
 | 
			
		||||
//   std::list<T, A>& operator<<(std::list<T, A>& l, const FROM& o)
 | 
			
		||||
//     throw(std::bad_exception) {
 | 
			
		||||
//   l.push_back(T(o));
 | 
			
		||||
//   return l;
 | 
			
		||||
// }
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
  std::list<T, A>& operator<<(std::list<T, A>& l, const T& o)
 | 
			
		||||
  std::list<T, A> operator<<(std::list<T, A> l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.push_back(o);
 | 
			
		||||
  return l;
 | 
			
		||||
@@ -91,8 +85,8 @@ template <typename T, typename A>
 | 
			
		||||
    @param o a value to be inserted into list @c l
 | 
			
		||||
    @pre \#include <mrw/list.hxx> */
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::list<T, A>& operator<<(std::list<T, A>& l,
 | 
			
		||||
                                const char *const o)
 | 
			
		||||
    std::list<T, A> operator<<(std::list<T, A> l,
 | 
			
		||||
                               const char *const o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.push_back(T(o));
 | 
			
		||||
  return l;
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,6 @@
 | 
			
		||||
    @param o a value to be inserted into map @c l
 | 
			
		||||
    @pre \#include <mrw/map.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::map<K, T, C, A> operator<<(std::map<K, T, C, A> l,
 | 
			
		||||
                                     const std::pair<K, T>& o)
 | 
			
		||||
@@ -63,19 +62,6 @@ template <typename K, typename T, class C, typename A>
 | 
			
		||||
                                "map element already exists");
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::map<K, T, C, A>&& operator<<(std::map<K, T, C, A>&& l,
 | 
			
		||||
                                     const std::pair<K, T>& o)
 | 
			
		||||
  throw(std::exception) {
 | 
			
		||||
  if (!l.insert(o).second)
 | 
			
		||||
    throw mrw::invalid_argument(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                                ": std::map<>&"
 | 
			
		||||
                                " operator<<(std::map<>&, const T&),"
 | 
			
		||||
                                "map element already exists");
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @brief extract the first value of a map
 | 
			
		||||
 | 
			
		||||
@@ -96,9 +82,9 @@ template <typename K, typename T, class C, typename A>
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre \#include <mrw/map.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::map<K, T, C, A> operator>>(std::map<K, T, C, A> l, std::pair<K, T>& o)
 | 
			
		||||
    std::map<K, T, C, A>& operator>>(std::map<K, T, C, A>& l,
 | 
			
		||||
                                     std::pair<K, T>& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::map<K, T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
@@ -109,21 +95,6 @@ template <typename K, typename T, class C, typename A>
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::map<K, T, C, A>&& operator>>(std::map<K, T, C, A>&& l,
 | 
			
		||||
                                      std::pair<K, T>& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::map<K, T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
    throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                            ": std::map<>& operator>>(std::map<>&, T&),"
 | 
			
		||||
                            " map is empty");
 | 
			
		||||
  o = *it;
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
//@}
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,6 @@
 | 
			
		||||
    @param o a value to be inserted into multimap @c l
 | 
			
		||||
    @pre \#include <mrw/multimap.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::multimap<K, T, C, A> operator<<(std::multimap<K, T, C, A> l,
 | 
			
		||||
                                         const std::pair<K, T>& o)
 | 
			
		||||
@@ -59,15 +58,6 @@ template <typename K, typename T, class C, typename A>
 | 
			
		||||
  l.insert(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename K, typename T, class C, typename A>&&
 | 
			
		||||
    std::multimap<K, T, C, A> operator<<(std::multimap<K, T, C, A>&& l,
 | 
			
		||||
                                         const std::pair<K, T>& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.insert(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @brief extract the first value of a multimap
 | 
			
		||||
 | 
			
		||||
@@ -88,9 +78,8 @@ template <typename K, typename T, class C, typename A>&&
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre \#include <mrw/multimap.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::multimap<K, T, C, A> operator>>(std::multimap<K, T, C, A> l,
 | 
			
		||||
    std::multimap<K, T, C, A>& operator>>(std::multimap<K, T, C, A>& l,
 | 
			
		||||
                                         std::pair<K, T>& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::multimap<K, T, C, A>::iterator it(l.begin());
 | 
			
		||||
@@ -102,21 +91,6 @@ template <typename K, typename T, class C, typename A>
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename K, typename T, class C, typename A>
 | 
			
		||||
    std::multimap<K, T, C, A>&& operator>>(std::multimap<K, T, C, A>&& l,
 | 
			
		||||
                                           std::pair<K, T>& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::multimap<K, T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
    throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                            ": std::multimap<>::operator>>,"
 | 
			
		||||
                            " multimap is empty");
 | 
			
		||||
  o = *it;
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
//@}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,21 +49,12 @@
 | 
			
		||||
    @param o a value to be inserted into multiset @c l
 | 
			
		||||
    @pre \#include <mrw/multiset.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::multiset<T, C, A> operator<<(std::multiset<T, C, A> l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.insert(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::multiset<T, C, A>&& operator<<(std::multiset<T, C, A>&& l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.insert(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @brief extract the first value of a multiset
 | 
			
		||||
 | 
			
		||||
@@ -83,9 +74,8 @@ template <typename T, class C, typename A>
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre \#include <mrw/multiset.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::multiset<T, C, A> operator>>(std::multiset<T, C, A> l, T& o)
 | 
			
		||||
    std::multiset<T, C, A>& operator>>(std::multiset<T, C, A>& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::multiset<T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
@@ -96,20 +86,6 @@ template <typename T, class C, typename A>
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::multiset<T, C, A>&& operator>>(std::multiset<T, C, A>&& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::multiset<T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
    throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                            ": std::multiset<> operator>>,"
 | 
			
		||||
                            " multiset is empty");
 | 
			
		||||
  o = *it;
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
//@}
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,6 @@
 | 
			
		||||
    @param o a value to be inserted into set @c l
 | 
			
		||||
    @pre \#include <mrw/set.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::set<T, C, A> operator<<(std::set<T, C, A> l, const T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
@@ -60,17 +59,6 @@ template <typename T, class C, typename A>
 | 
			
		||||
                                "set element already exists");
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::set<T, C, A>&& operator<<(std::set<T, C, A>&& l, const T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  if (!l.insert(o).second)
 | 
			
		||||
    throw mrw::invalid_argument(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                                ": std::set<> operator<<, "
 | 
			
		||||
                                "set element already exists");
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @brief extract the first value of a set
 | 
			
		||||
 | 
			
		||||
@@ -90,9 +78,8 @@ template <typename T, class C, typename A>
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre \#include <mrw/set.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::set<T, C, A> operator>>(std::set<T, C, A> l, T& o)
 | 
			
		||||
    std::set<T, C, A>& operator>>(std::set<T, C, A>& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::set<T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
@@ -103,20 +90,6 @@ template <typename T, class C, typename A>
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, class C, typename A>
 | 
			
		||||
    std::set<T, C, A> operator>>(std::set<T, C, A> l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::set<T, C, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
    throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                            ": std::set<> operator>>,"
 | 
			
		||||
                            " set is empty");
 | 
			
		||||
  o = *it;
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
//@}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,21 +49,12 @@
 | 
			
		||||
    @param o a value to be inserted into vector @c l
 | 
			
		||||
    @pre \#include <mrw/vector.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::vector<T, A> operator<<(std::vector<T, A> l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.push_back(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
    std::vector<T, A>&& operator<<(std::vector<T, A>&& l, const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
  l.push_back(o);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @brief extract the first value of a vector
 | 
			
		||||
 | 
			
		||||
@@ -83,9 +74,8 @@ template <typename T, typename A>
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre \#include <mrw/vector.hxx>
 | 
			
		||||
*/
 | 
			
		||||
#ifdef MRW__OLD_PRE11_COMPILER
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
std::vector<T, A> operator>>(std::vector<T, A> l, T& o)
 | 
			
		||||
std::vector<T, A>& operator>>(std::vector<T, A>& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::vector<T, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
@@ -96,20 +86,6 @@ std::vector<T, A> operator>>(std::vector<T, A> l, T& o)
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
template <typename T, typename A>
 | 
			
		||||
std::vector<T, A>&& operator>>(std::vector<T, A>&& l, T& o)
 | 
			
		||||
    throw(std::exception) {
 | 
			
		||||
  typename std::vector<T, A>::iterator it(l.begin());
 | 
			
		||||
  if (it==l.end())
 | 
			
		||||
    throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
 | 
			
		||||
                            ": std::vector<>& operator>>(std::vector<>&, T&),"
 | 
			
		||||
                            " vector is empty");
 | 
			
		||||
  o = *it;
 | 
			
		||||
  l.erase(it);
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
//@}
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user