Skip to content

Commit

Permalink
Simpler fix for aliasing
Browse files Browse the repository at this point in the history
  • Loading branch information
Lamakaio committed Sep 28, 2024
1 parent ddff6d7 commit 7eba42b
Showing 1 changed file with 7 additions and 15 deletions.
22 changes: 7 additions & 15 deletions src/osp/framework/framework.h
Original file line number Diff line number Diff line change
Expand Up @@ -344,28 +344,20 @@ struct Framework

if constexpr ( ! std::is_empty_v<typename FI_T::Pipelines> )
{
constexpr size_t members_size = sizeof(typename FI_T::Pipelines)/sizeof(PipelineDefBlank_t);
PipelineDefBlank_t plMembers[members_size] ;
std::memcpy(plMembers, &out.pl, sizeof(typename FI_T::Pipelines));
//auto const plMembers = arrayCast<PipelineDefBlank_t>( arrayCast<std::byte>( arrayView(&out.pl, 1) ) );
for (std::size_t i = 0; i < members_size; ++i)
auto const plMembers = arrayCast<PipelineDefBlank_t>( arrayCast<std::byte>( arrayView(&out.pl, 1) ) );
for (std::size_t i = 0; i < plMembers.size(); ++i)
{
plMembers[i].m_value = rInterface.pipelines[i];
memcpy(&plMembers[i].m_value, &rInterface.pipelines[i], sizeof(PipelineId));
}
std::memcpy(&out.pl, plMembers, sizeof(typename FI_T::Pipelines));
}

if constexpr ( ! std::is_empty_v<typename FI_T::DataIds> )
{
constexpr size_t members_size = sizeof(typename FI_T::DataIds)/sizeof(DataId);
DataId diMembers[members_size] ;
std::memcpy(diMembers, &out.di, sizeof(typename FI_T::DataIds));
//auto const diMembers = arrayCast<DataId>( arrayCast<std::byte>( arrayView(&out.di, 1) ) );
for (std::size_t i = 0; i < members_size; ++i)
{
auto const diMembers = arrayCast<DataId>( arrayCast<std::byte>( arrayView(&out.di, 1) ) );
for (std::size_t i = 0; i < diMembers.size(); ++i)
{
diMembers[i] = rInterface.data[i];
memcpy(&diMembers[i], &rInterface.data[i], sizeof(DataId));
}
std::memcpy(&out.di, diMembers, sizeof(typename FI_T::DataIds));
}
}

Expand Down

0 comments on commit 7eba42b

Please sign in to comment.