31 const std::size_t named_sub_size = named_sub.size();
47 if(sub.size()!=o_sub.size())
49 #ifdef NAMED_SUB_IS_FORWARD_LIST
51 std::distance(named_sub.begin(), named_sub.end()) !=
52 std::distance(o_named_sub.begin(), o_named_sub.end()))
57 if(named_sub.size()!=o_named_sub.size())
62 irept::subt::const_iterator s_it=sub.begin();
63 irept::subt::const_iterator os_it=o_sub.begin();
65 for(; s_it!=sub.end(); s_it++, os_it++)
72 irept::named_subt::const_iterator s_it=named_sub.begin();
73 irept::named_subt::const_iterator os_it=o_named_sub.begin();
75 for(; s_it!=named_sub.end(); s_it++, os_it++)
76 if(s_it->first!=os_it->first ||
89 merged_irep_storet::const_iterator entry=
100 dest_sub.reserve(src_sub.size());
103 dest_sub.push_back(
merged(*it));
108 #ifdef NAMED_SUB_IS_FORWARD_LIST
109 irept::named_subt::iterator before = dest_named_sub.before_begin();
113 #ifdef NAMED_SUB_IS_FORWARD_LIST
114 dest_named_sub.emplace_after(
115 before, it->first,
merged(it->second));
118 dest_named_sub[it->first]=
merged(it->second);
122 std::pair<to_be_merged_irep_storet::const_iterator, bool> result=
130 static_cast<const irept &
>(*result.first));
150 std::size_t index = 0;
154 if(&op.
read() != &(it->read()))
157 dest_sub_ptr = &(
const_cast<irept &
>(*entry.first)).get_sub();
158 (*dest_sub_ptr)[index] = op;
166 std::ptrdiff_t advance_by = 0;
172 if(&op.
read() != &(it->second.read()))
174 if(!dest_named_sub_ptr)
176 &(
const_cast<irept &
>(*entry.first)).get_named_sub();
177 std::next(dest_named_sub_ptr->begin(), advance_by)->second = op;
196 irep_storet::const_iterator entry=
irep_store.find(irep);
204 dest_sub.reserve(src_sub.size());
207 dest_sub.push_back(
merged(*it));
212 #ifdef NAMED_SUB_IS_FORWARD_LIST
213 irept::named_subt::iterator before = dest_named_sub.before_begin();
217 #ifdef NAMED_SUB_IS_FORWARD_LIST
218 dest_named_sub.emplace_after(
219 before, it->first,
merged(it->second));
222 dest_named_sub[it->first]=
merged(it->second);
226 return *
irep_store.insert(std::move(new_irep)).first;