| 181 | const ui16 N_GROUP_FIRST_CODE = 0xfffe; |
| 182 | |
| 183 | static void OptimizeTreeEncoding(TVector<ui16>* res) { |
| 184 | TVector<ui16>& vec = *res; |
| 185 | for (int i = 0; i < vec.ysize();) { |
| 186 | if (vec[i] == N_GROUP_START && vec[i + 1] == N_GROUP_END) |
| 187 | vec.erase(vec.begin() + i, vec.begin() + i + 2); |
| 188 | else if (vec[i] == N_GROUP_START && vec[i + 2] == N_GROUP_END) { |
| 189 | vec[i] = vec[i + 1]; |
| 190 | vec.erase(vec.begin() + i + 1, vec.begin() + i + 3); |
| 191 | ++i; |
| 192 | } else |
| 193 | ++i; |
| 194 | } |
| 195 | if (vec[0] == N_GROUP_START && vec.back() == N_GROUP_END) { |
| 196 | vec.erase(vec.begin()); |
| 197 | vec.erase(vec.end() - 1); |
| 198 | } |
| 199 | } |
| 200 | |
| 201 | static void EncodeTreeImpl(const TDistrTree& t, TVector<ui16>* res) { |
| 202 | if (t.Children.empty()) { |