81 lines
3.2 KiB
C++
81 lines
3.2 KiB
C++
#include "runway.h"
|
|
namespace germanairlinesva_simdata
|
|
{
|
|
Runway::Runway(std::string designator,
|
|
double latitudeStart,
|
|
double longitudeStart,
|
|
double latitudeEnd,
|
|
double longitudeEnd,
|
|
double width)
|
|
{
|
|
this->designator = designator;
|
|
this->width = width;
|
|
this->length = germanairlinesva_geodata::distanceEarthD(latitudeStart,
|
|
longitudeStart,
|
|
latitudeEnd,
|
|
longitudeEnd);
|
|
this->trueHeading = (std::uint16_t)std::round(
|
|
germanairlinesva_geodata::bearingDD(latitudeStart,
|
|
longitudeStart,
|
|
latitudeEnd,
|
|
longitudeEnd));
|
|
this->bounds = germanairlinesva_geodata::calculateBoxDD(
|
|
{latitudeStart, longitudeStart},
|
|
{latitudeEnd, longitudeEnd},
|
|
this->trueHeading,
|
|
this->width);
|
|
|
|
file = std::vector<std::uint8_t>(
|
|
1 + this->designator.length() + 1 + sizeof(this->bounds) +
|
|
sizeof(this->width) + sizeof(this->length) +
|
|
sizeof(this->trueHeading),
|
|
0);
|
|
std::uint8_t *bufPtr = file.data();
|
|
std::memset(bufPtr,
|
|
static_cast<std::uint8_t>(this->designator.length()),
|
|
sizeof(std::uint8_t));
|
|
bufPtr++;
|
|
std::memcpy(bufPtr, this->designator.c_str(), this->designator.length());
|
|
bufPtr += this->designator.length() + 1;
|
|
std::memcpy(bufPtr, &this->bounds, sizeof(this->bounds));
|
|
bufPtr += sizeof(this->bounds);
|
|
std::memcpy(bufPtr, &this->width, sizeof(this->width));
|
|
bufPtr += sizeof(this->width);
|
|
std::memcpy(bufPtr, &this->length, sizeof(this->length));
|
|
bufPtr += sizeof(this->length);
|
|
std::memcpy(bufPtr, &this->trueHeading, sizeof(this->trueHeading));
|
|
}
|
|
|
|
Runway::Runway(std::string designator,
|
|
germanairlinesva_geodata::box bounds,
|
|
std::uint8_t width,
|
|
std::uint16_t length,
|
|
std::uint16_t trueHeading)
|
|
{
|
|
this->designator = designator;
|
|
this->bounds = bounds;
|
|
this->width = width;
|
|
this->length = length;
|
|
this->trueHeading = trueHeading;
|
|
|
|
file = std::vector<std::uint8_t>(
|
|
1 + this->designator.length() + 1 + sizeof(this->bounds) +
|
|
sizeof(this->width) + sizeof(this->length) +
|
|
sizeof(this->trueHeading),
|
|
0);
|
|
std::uint8_t *bufPtr = file.data();
|
|
std::memset(bufPtr,
|
|
static_cast<std::uint8_t>(this->designator.length()),
|
|
sizeof(std::uint8_t));
|
|
bufPtr++;
|
|
std::memcpy(bufPtr, this->designator.c_str(), this->designator.length());
|
|
bufPtr += this->designator.length() + 1;
|
|
std::memcpy(bufPtr, &this->bounds, sizeof(this->bounds));
|
|
bufPtr += sizeof(this->bounds);
|
|
std::memcpy(bufPtr, &this->width, sizeof(this->width));
|
|
bufPtr += sizeof(this->width);
|
|
std::memcpy(bufPtr, &this->length, sizeof(this->length));
|
|
bufPtr += sizeof(this->length);
|
|
std::memcpy(bufPtr, &this->trueHeading, sizeof(this->trueHeading));
|
|
}
|
|
} // namespace germanairlinesva_simdata
|