Destructor. ! Need to destruct elements of array, members of object, or copy-string. */
| 798 | /*! Need to destruct elements of array, members of object, or copy-string. |
| 799 | */ |
| 800 | ~GenericValue() { |
| 801 | if (Allocator::kNeedFree) { // Shortcut by Allocator's trait |
| 802 | switch(data_.f.flags) { |
| 803 | case kArrayFlag: |
| 804 | { |
| 805 | GenericValue* e = GetElementsPointer(); |
| 806 | for (GenericValue* v = e; v != e + data_.a.size; ++v) |
| 807 | v->~GenericValue(); |
| 808 | Allocator::Free(e); |
| 809 | } |
| 810 | break; |
| 811 | |
| 812 | case kObjectFlag: |
| 813 | for (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m) |
| 814 | m->~Member(); |
| 815 | Allocator::Free(GetMembersPointer()); |
| 816 | break; |
| 817 | |
| 818 | case kCopyStringFlag: |
| 819 | Allocator::Free(const_cast<Ch*>(GetStringPointer())); |
| 820 | break; |
| 821 | |
| 822 | default: |
| 823 | break; // Do nothing for other types. |
| 824 | } |
| 825 | } |
| 826 | } |
| 827 | |
| 828 | //@} |
| 829 |
nothing calls this directly
no test coverage detected