Destructor. ! Need to destruct elements of array, members of object, or copy-string. */
| 730 | /*! Need to destruct elements of array, members of object, or copy-string. |
| 731 | */ |
| 732 | ~GenericValue() { |
| 733 | if (Allocator::kNeedFree) { // Shortcut by Allocator's trait |
| 734 | switch(data_.f.flags) { |
| 735 | case kArrayFlag: |
| 736 | { |
| 737 | GenericValue* e = GetElementsPointer(); |
| 738 | for (GenericValue* v = e; v != e + data_.a.size; ++v) |
| 739 | v->~GenericValue(); |
| 740 | Allocator::Free(e); |
| 741 | } |
| 742 | break; |
| 743 | |
| 744 | case kObjectFlag: |
| 745 | for (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m) |
| 746 | m->~Member(); |
| 747 | Allocator::Free(GetMembersPointer()); |
| 748 | break; |
| 749 | |
| 750 | case kCopyStringFlag: |
| 751 | Allocator::Free(const_cast<Ch*>(GetStringPointer())); |
| 752 | break; |
| 753 | |
| 754 | default: |
| 755 | break; // Do nothing for other types. |
| 756 | } |
| 757 | } |
| 758 | } |
| 759 | |
| 760 | //@} |
| 761 |
nothing calls this directly
no test coverage detected