| 464 | |
| 465 | |
| 466 | void Map::Clear() |
| 467 | { |
| 468 | while (mCount) |
| 469 | { |
| 470 | --mCount; |
| 471 | // Copy key before Free() since it might cause re-entry via __delete. |
| 472 | auto key = mItem[mCount].key; |
| 473 | mItem[mCount].Free(); |
| 474 | if (mCount >= mKeyOffsetString) |
| 475 | free(key.s); |
| 476 | else |
| 477 | { |
| 478 | --mKeyOffsetString; |
| 479 | if (mCount >= mKeyOffsetObject) |
| 480 | key.p->Release(); // Might also cause re-entry. |
| 481 | else |
| 482 | --mKeyOffsetObject; |
| 483 | } |
| 484 | } |
| 485 | } |
| 486 | |
| 487 | |
| 488 | // |