| 223 | } |
| 224 | |
| 225 | void LineLayoutCache::AllocateForLevel(int linesOnScreen, int linesInDoc) { |
| 226 | PLATFORM_ASSERT(useCount == 0); |
| 227 | size_t lengthForLevel = 0; |
| 228 | if (level == llcCaret) { |
| 229 | lengthForLevel = 1; |
| 230 | } else if (level == llcPage) { |
| 231 | lengthForLevel = linesOnScreen + 1; |
| 232 | } else if (level == llcDocument) { |
| 233 | lengthForLevel = linesInDoc; |
| 234 | } |
| 235 | if (lengthForLevel > cache.size()) { |
| 236 | Deallocate(); |
| 237 | Allocate(lengthForLevel); |
| 238 | } else { |
| 239 | if (lengthForLevel < cache.size()) { |
| 240 | for (size_t i = lengthForLevel; i < cache.size(); i++) { |
| 241 | delete cache[i]; |
| 242 | cache[i] = 0; |
| 243 | } |
| 244 | } |
| 245 | cache.resize(lengthForLevel); |
| 246 | } |
| 247 | PLATFORM_ASSERT(cache.size() == lengthForLevel); |
| 248 | } |
| 249 | |
| 250 | void LineLayoutCache::Deallocate() { |
| 251 | PLATFORM_ASSERT(useCount == 0); |