| 
									
										
										
										
											2004-10-07 09:31:30 +00:00
										 |  |  | /** @file
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $Id$ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $Date$ | 
					
						
							|  |  |  |     $Author$ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @copy © Marc Wäckerlin | 
					
						
							|  |  |  |     @license LGPL, see file <a href="license.html">COPYING</a> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $Log$ | 
					
						
							| 
									
										
										
										
											2004-12-20 07:40:36 +00:00
										 |  |  |     Revision 1.2  2004/12/20 07:40:36  marc | 
					
						
							|  |  |  |     documentation improved, new grouping | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-07 09:31:30 +00:00
										 |  |  |     Revision 1.1  2004/10/07 09:31:30  marc | 
					
						
							|  |  |  |     new feature | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | #ifndef __MRW__MULTIMAP__HPP__
 | 
					
						
							|  |  |  | #define __MRW__MULTIMAP__HPP__
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <map>
 | 
					
						
							|  |  |  | #include <mrw/exception.hpp>
 | 
					
						
							|  |  |  | #include <mrw/string.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** @addtogroup StdExt
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | //@{
 | 
					
						
							| 
									
										
										
										
											2004-12-20 07:40:36 +00:00
										 |  |  | /** @addtogroup StdExtSTL
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | //@{
 | 
					
						
							|  |  |  | /** @addtogroup StdExtmultimap multimap
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | //@{
 | 
					
						
							| 
									
										
										
										
											2004-10-07 09:31:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** @brief insert a value in a multimap
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @code | 
					
						
							|  |  |  |     std::multimap<int, std::string> test; | 
					
						
							|  |  |  |     test<<std::make_pair(1, std::string("one")) | 
					
						
							|  |  |  |         <<std::make_pair(2, std::string("two")); | 
					
						
							|  |  |  |     @endcode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @throw mrw::invalid_argument, if element is already in multimap | 
					
						
							|  |  |  |     @param l a multimap of values | 
					
						
							|  |  |  |     @param o a value to be inserted into multimap @c l | 
					
						
							|  |  |  |     @pre #include <mrw/multimap.hpp> | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 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; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** @brief extract the first value of a multimap
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @code | 
					
						
							|  |  |  |     std::multimap<int, std::string> test; | 
					
						
							|  |  |  |     test<<std::make_pair(1, std::string("one")) | 
					
						
							|  |  |  |         <<std::make_pair(2, std::string("two")); | 
					
						
							|  |  |  |     std::pair<int, std::string> i1, i2; | 
					
						
							|  |  |  |     test>>i1>>i2; | 
					
						
							|  |  |  |     // now: i1==(1, "one") i2==(2, "two") test=={}
 | 
					
						
							|  |  |  |     @endcode | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @param l a multimap of values | 
					
						
							|  |  |  |     @param o a value to be extracted from multimap @c l | 
					
						
							|  |  |  |     @throw mrw::length_error, if multimap was empty on entry | 
					
						
							|  |  |  |     @note when something is extracted from a multimap, it is removed | 
					
						
							|  |  |  |     from the multimap, that means after every shift the multimap is | 
					
						
							|  |  |  |     shortened by the shifted element | 
					
						
							| 
									
										
										
										
											2004-12-20 07:40:36 +00:00
										 |  |  |     @pre #include <mrw/multimap.hpp> | 
					
						
							| 
									
										
										
										
											2004-10-07 09:31:30 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | 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>>(std::multimap<>&, T&)," | 
					
						
							|  |  |  |                             " multimap is empty"); | 
					
						
							|  |  |  |   o = *it; | 
					
						
							|  |  |  |   l.erase(it); | 
					
						
							|  |  |  |   return l; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-12-20 07:40:36 +00:00
										 |  |  | //@}
 | 
					
						
							|  |  |  | //@}
 | 
					
						
							| 
									
										
										
										
											2004-10-07 09:31:30 +00:00
										 |  |  | //@}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |