| 136 | } |
| 137 | |
| 138 | void |
| 139 | LayoutHandle::rename (const std::string &name, bool force) |
| 140 | { |
| 141 | std::string n (name); |
| 142 | |
| 143 | if (n != m_name) { |
| 144 | |
| 145 | if (force || find (n) == 0) { |
| 146 | ms_dict.erase (m_name); |
| 147 | if (tl::verbosity () >= 40) { |
| 148 | tl::info << "Renamed layout from " << m_name << " to " << n; |
| 149 | } |
| 150 | m_name = n; |
| 151 | ms_dict.insert (std::make_pair (n, this)); |
| 152 | return; |
| 153 | } |
| 154 | |
| 155 | // rename using suffix "[u]" where u is a unique index |
| 156 | int nn = 0; |
| 157 | int ns = 0x40000000; |
| 158 | do { |
| 159 | n = name + tl::sprintf ("[%d]", nn + ns); |
| 160 | if (find (n) != 0) { |
| 161 | nn += ns; |
| 162 | } |
| 163 | ns /= 2; |
| 164 | } while (ns > 0); |
| 165 | |
| 166 | n = name + tl::sprintf ("[%d]", nn + 1); |
| 167 | |
| 168 | if (tl::verbosity () >= 40) { |
| 169 | tl::info << "Renamed layout from " << m_name << " to " << n; |
| 170 | } |
| 171 | |
| 172 | if (find (m_name) == this) { |
| 173 | ms_dict.erase (m_name); |
| 174 | } |
| 175 | |
| 176 | m_name = n; |
| 177 | ms_dict.insert (std::make_pair (n, this)); |
| 178 | return; |
| 179 | |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | db::Layout & |
| 184 | LayoutHandle::layout () const |
no test coverage detected