| 752 | } |
| 753 | |
| 754 | TopDUContextDynamicData::ItemDataInfo TopDUContextDynamicData::writeDataInfo(const ItemDataInfo& info, |
| 755 | const DUChainBaseData* data, |
| 756 | uint& totalDataOffset) |
| 757 | { |
| 758 | ItemDataInfo ret(info); |
| 759 | Q_ASSERT(info.dataOffset); |
| 760 | const auto size = DUChainItemSystem::self().dynamicSize(*data); |
| 761 | Q_ASSERT(size); |
| 762 | |
| 763 | if (m_data.back().array.size() - m_data.back().position < size) { |
| 764 | //Create a new m_data item |
| 765 | m_data.append({QByteArray(std::max(size, 10000u), 0), 0u}); |
| 766 | } |
| 767 | |
| 768 | ret.dataOffset = totalDataOffset; |
| 769 | |
| 770 | uint pos = m_data.back().position; |
| 771 | m_data.back().position += size; |
| 772 | totalDataOffset += size; |
| 773 | |
| 774 | auto target = reinterpret_cast<DUChainBaseData*>(m_data.back().array.data() + pos); |
| 775 | #if defined(__GNUC__) && !defined(__INTEL_COMPILER) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 800) |
| 776 | #pragma GCC diagnostic push |
| 777 | #pragma GCC diagnostic ignored "-Wclass-memaccess" |
| 778 | #endif |
| 779 | memcpy(target, data, size); |
| 780 | #if defined(__GNUC__) && !defined(__INTEL_COMPILER) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 800) |
| 781 | #pragma GCC diagnostic pop |
| 782 | #endif |
| 783 | |
| 784 | verifyDataInfo(ret, m_data); |
| 785 | return ret; |
| 786 | } |
| 787 | |
| 788 | uint TopDUContextDynamicData::allocateDeclarationIndex(Declaration* decl, bool temporary) |
| 789 | { |
no test coverage detected