New alignment service
This commit is contained in:
36
src/Services/AlignmentService.cpp
Normal file
36
src/Services/AlignmentService.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#include "AlignmentService.hpp"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace Services
|
||||
{
|
||||
Targets::TargetMemoryAddress AlignmentService::alignMemoryAddress(
|
||||
Targets::TargetMemoryAddress address,
|
||||
Targets::TargetMemorySize alignTo
|
||||
) {
|
||||
return (address / alignTo) * alignTo;
|
||||
}
|
||||
|
||||
Targets::TargetMemorySize AlignmentService::alignMemorySize(
|
||||
Targets::TargetMemorySize size,
|
||||
Targets::TargetMemorySize alignTo
|
||||
) {
|
||||
return (size % alignTo) != 0
|
||||
? static_cast<Targets::TargetMemorySize>(
|
||||
std::ceil(static_cast<double>(size) / static_cast<double>(alignTo)) * alignTo
|
||||
)
|
||||
: size;
|
||||
}
|
||||
|
||||
Targets::TargetMemoryAddressRange AlignmentService::alignAddressRange(
|
||||
const Targets::TargetMemoryAddressRange& from,
|
||||
Targets::TargetMemorySize alignTo
|
||||
) {
|
||||
const auto alignedStartAddress = AlignmentService::alignMemoryAddress(from.startAddress, alignTo);
|
||||
return Targets::TargetMemoryAddressRange{
|
||||
alignedStartAddress,
|
||||
alignedStartAddress + AlignmentService::alignMemorySize(from.size()
|
||||
+ (from.startAddress - alignedStartAddress), alignTo) - 1
|
||||
};
|
||||
}
|
||||
}
|
||||
26
src/Services/AlignmentService.hpp
Normal file
26
src/Services/AlignmentService.hpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "src/Targets/TargetMemory.hpp"
|
||||
#include "src/Targets/TargetMemoryAddressRange.hpp"
|
||||
|
||||
namespace Services
|
||||
{
|
||||
class AlignmentService
|
||||
{
|
||||
public:
|
||||
static Targets::TargetMemoryAddress alignMemoryAddress(
|
||||
Targets::TargetMemoryAddress address,
|
||||
Targets::TargetMemorySize alignTo
|
||||
);
|
||||
|
||||
static Targets::TargetMemorySize alignMemorySize(
|
||||
Targets::TargetMemorySize size,
|
||||
Targets::TargetMemorySize alignTo
|
||||
);
|
||||
|
||||
static Targets::TargetMemoryAddressRange alignAddressRange(
|
||||
const Targets::TargetMemoryAddressRange& from,
|
||||
Targets::TargetMemorySize alignTo
|
||||
);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user