? bin ? stage Index: boost/signals/detail/named_slot_map.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/signals/detail/named_slot_map.hpp,v retrieving revision 1.6 diff -r1.6 named_slot_map.hpp 16d15 < #include 20a20 > #include 74,75c74,79 < class impl; < --- > typedef std::list group_list; > typedef group_list::iterator slot_pair_iterator; > typedef std::map slot_container_type; > typedef slot_container_type::iterator group_iterator; > typedef slot_container_type::const_iterator const_group_iterator; > 81,84d84 < named_slot_map_iterator(const named_slot_map_iterator& other); < ~named_slot_map_iterator(); < named_slot_map_iterator& operator=(const named_slot_map_iterator& other); < 95c95,101 < named_slot_map_iterator(std::auto_ptr); --- > named_slot_map_iterator(group_iterator group, group_iterator last) : > group(group), last_group(last), slot_assigned(false) > { init_next_group(); } > named_slot_map_iterator(group_iterator group, group_iterator last, > slot_pair_iterator slot) : > group(group), last_group(group), slot_(slot), slot_assigned(true) > { } 97,101c103,115 < #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) < shared_ptr impl_; < #else < scoped_ptr impl_; < #endif --- > void init_next_group() > { > while (group != last_group && group->second.empty()) ++group; > if (group != last_group) { > slot_ = group->second.begin(); > slot_assigned = true; > } > } > > group_iterator group; > group_iterator last_group; > slot_pair_iterator slot_; > bool slot_assigned; 112d125 < ~named_slot_map(); 124c137,140 < class impl; --- > typedef std::list group_list; > typedef std::map slot_container_type; > typedef slot_container_type::iterator group_iterator; > typedef slot_container_type::const_iterator const_group_iterator; 126,130c142,147 < #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) < shared_ptr impl_; < #else < scoped_ptr impl_; < #endif --- > bool empty(const_group_iterator group) const > { > return (group->second.empty() && group != groups.begin() && group != back); > } > slot_container_type groups; > group_iterator back; Index: libs/signals/src/named_slot_map.cpp =================================================================== RCS file: /cvsroot/boost/boost/libs/signals/src/named_slot_map.cpp,v retrieving revision 1.8 diff -r1.8 named_slot_map.cpp 26,116c26 < class named_slot_map::impl < { < public: < impl(const compare_type& compare) : groups(compare) < { < clear(); < } < < void clear() < { < groups.clear(); < groups[front_type()]; < groups[back_type()]; < back = groups.end(); < --back; < } < < slot_container_type groups; < group_iterator back; < < bool empty(const_group_iterator group) const < { < return (group->second.empty() && group != groups.begin() && group != back); < } < }; < < class named_slot_map_iterator::impl < { < public: < impl() : slot_assigned(false) {} < < impl(group_iterator group, group_iterator last_group) < : group(group), last_group(last_group), slot_assigned(false) < { init_next_group(); } < < impl(group_iterator group, group_iterator last_group, < slot_pair_iterator slot_) < : group(group), last_group(last_group), slot_(slot_), slot_assigned(true) < { } < < impl(const impl& other) < : group(other.group), last_group(other.last_group), < slot_assigned(other.slot_assigned) < { < if (slot_assigned) slot_ = other.slot_; < } < < impl& operator=(const impl& other) < { < group = other.group; < last_group = other.last_group; < slot_assigned = other.slot_assigned; < if (slot_assigned) slot_ = other.slot_; < return *this; < } < < void init_next_group() < { < while (group != last_group && group->second.empty()) ++group; < if (group != last_group) { < slot_ = group->second.begin(); < slot_assigned = true; < } < } < < group_iterator group; < group_iterator last_group; < slot_pair_iterator slot_; < bool slot_assigned; < }; < < named_slot_map_iterator::named_slot_map_iterator() {} < < named_slot_map_iterator::named_slot_map_iterator(std::auto_ptr impl_) < : impl_(impl_) {} < < named_slot_map_iterator < ::named_slot_map_iterator(const named_slot_map_iterator& other) < { < impl_.reset(new impl(*other.impl_)); < } < < named_slot_map_iterator::~named_slot_map_iterator() {} < < named_slot_map_iterator& < named_slot_map_iterator::operator=(const named_slot_map_iterator& other) < { < if (impl_) *impl_ = *other.impl_; < else impl_.reset(new impl(*other.impl_)); < return *this; < } --- > named_slot_map_iterator::named_slot_map_iterator() : slot_assigned(false) {} 119c29 < { return *impl_->slot_; } --- > { return *slot_; } 123,126c33,36 < ++impl_->slot_; < if (impl_->slot_ == impl_->group->second.end()) { < ++impl_->group; < impl_->init_next_group(); --- > ++slot_; > if (slot_ == group->second.end()) { > ++group; > init_next_group(); 133,135c43,45 < return (impl_->group == other.impl_->group < && (impl_->group == impl_->last_group < || impl_->slot_ == other.impl_->slot_)); --- > return (group == other.group > && (group == last_group > || slot_ == other.slot_)); 143c53 < named_slot_map::named_slot_map(const compare_type& compare) --- > named_slot_map::named_slot_map(const compare_type& compare) : groups(compare) 145c55 < impl_.reset(new impl(compare)); --- > clear(); 148,150c58,65 < named_slot_map::~named_slot_map() {} < < void named_slot_map::clear() { impl_->clear(); } --- > void named_slot_map::clear() > { > groups.clear(); > groups[front_type()]; > groups[back_type()]; > back = groups.end(); > --back; > } 154,159c69 < typedef named_slot_map::iterator::impl iterator_impl; < < std::auto_ptr < it(new iterator_impl(impl_->groups.begin(), < impl_->groups.end())); < return named_slot_map::iterator(it); --- > return named_slot_map::iterator(groups.begin(), groups.end()); 164,169c74 < typedef named_slot_map::iterator::impl iterator_impl; < < std::auto_ptr < it(new iterator_impl(impl_->groups.end(), < impl_->groups.end())); < return named_slot_map::iterator(it); --- > return named_slot_map::iterator(groups.end(), groups.end()); 179,180c84,85 < case at_front: group = impl_->groups.begin(); break; < case at_back: group = impl_->back; break; --- > case at_front: group = groups.begin(); break; > case at_back: group = back; break; 183,184c88,89 < group = impl_->groups.find(name); < if (group == impl_->groups.end()) { --- > group = groups.find(name); > if (group == groups.end()) { 186c91 < group = impl_->groups.insert(v).first; --- > group = groups.insert(v).first; 189,192c94,96 < typedef named_slot_map::iterator::impl iterator_impl; < std::auto_ptr it(new iterator_impl); < it->group = group; < it->last_group = impl_->groups.end(); --- > iterator it; > it.group = group; > it.last_group = groups.end(); 197,199c101,103 < it->slot_ = group->second.end(); < it->slot_assigned = true; < --(it->slot_); --- > it.slot_ = group->second.end(); > it.slot_assigned = true; > --(it.slot_); 204,205c108,109 < it->slot_ = group->second.begin(); < it->slot_assigned = true; --- > it.slot_ = group->second.begin(); > it.slot_assigned = true; 208c112 < return iterator(it); --- > return it; 213,214c117,118 < group_iterator group = impl_->groups.find(name); < if (group != impl_->groups.end()) { --- > group_iterator group = groups.find(name); > if (group != groups.end()) { 222c126 < impl_->groups.erase(group); --- > groups.erase(group); 229c133 < pos.impl_->slot_->first.disconnect(); --- > pos.slot_->first.disconnect(); 236,237c140,141 < group_iterator g = impl_->groups.begin(); < while (g != impl_->groups.end()) { --- > group_iterator g = groups.begin(); > while (g != groups.end()) { 245c149 < if (impl_->empty(g)) impl_->groups.erase(g++); --- > if (empty(g)) groups.erase(g++);