WSF
ProfilingCommon.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright (C) 2021 Stellar Science; U.S. Government has Unlimited Rights.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef PROFILINGCOMMON_HPP
13#define PROFILINGCOMMON_HPP
14
16
17#include <cstdint>
18#include <string>
19
20#include "UtException.hpp"
21
22namespace profiling
23{
25class Exception : public UtException
26{
27public:
28 Exception(const std::string& aWhat, int aErrorCode)
29 : UtException(aWhat)
30 , mReturnCode(aErrorCode)
31 {
32 }
33
34 int GetReturnCode() const { return mReturnCode; }
35
36private:
38 int mReturnCode;
39};
40
42{
45 uint16_t mEpoch;
47 uint16_t mMajor;
49 uint16_t mMinor;
51 uint16_t mPatch;
52};
53
68inline uint64_t PackVersionInfo(uint16_t aEpoch, uint16_t aMajor, uint16_t aMinor, uint16_t aPatch)
69{
70 const uint64_t epoch = static_cast<uint64_t>(aEpoch);
71 const uint64_t major = static_cast<uint64_t>(aMajor);
72 const uint64_t minor = static_cast<uint64_t>(aMinor);
73 const uint64_t patch = static_cast<uint64_t>(aPatch);
74
75 return (epoch << 48) | (major << 32) | (minor << 16) | patch;
76}
77
82inline VersionInfo UnpackVersionInfo(const uint64_t packedVersionInfo)
83{
84 constexpr auto epochShift = 48u;
85 constexpr auto majorShift = 32u;
86 constexpr auto minorShift = 16u;
87
88 constexpr uint64_t epochMask = 0xFFFF000000000000ull;
89 constexpr uint64_t majorMask = 0x0000FFFF00000000ull;
90 constexpr uint64_t minorMask = 0x00000000FFFF0000ull;
91 constexpr uint64_t patchMask = 0x000000000000FFFFull;
92
93 VersionInfo versionInfo;
94 versionInfo.mEpoch = static_cast<uint16_t>((packedVersionInfo & epochMask) >> epochShift);
95 versionInfo.mMajor = static_cast<uint16_t>((packedVersionInfo & majorMask) >> majorShift);
96 versionInfo.mMinor = static_cast<uint16_t>((packedVersionInfo & minorMask) >> minorShift);
97 versionInfo.mPatch = static_cast<uint16_t>(packedVersionInfo & patchMask);
98 return versionInfo;
99}
100
101} // namespace profiling
102#endif // PROFILINGCOMMON_HPP
int GetReturnCode() const
Definition ProfilingCommon.hpp:34
Exception(const std::string &aWhat, int aErrorCode)
Definition ProfilingCommon.hpp:28
Definition of utility struct and function used by the profiling targets.
Definition ProfilingCommon.hpp:23
VersionInfo UnpackVersionInfo(const uint64_t packedVersionInfo)
Unpacks the profiling library's version information.
Definition ProfilingCommon.hpp:82
uint64_t PackVersionInfo(uint16_t aEpoch, uint16_t aMajor, uint16_t aMinor, uint16_t aPatch)
Combines four uint16_t versioning values into one uint64_t.
Definition ProfilingCommon.hpp:68
structure defining the values used for semantic versioning of the profiling system
Definition ProfilingCommon.hpp:42
uint16_t mEpoch
Definition ProfilingCommon.hpp:45
uint16_t mMinor
incrementing MINOR version indicates when functionality is added in a backwards compatible manner.
Definition ProfilingCommon.hpp:49
uint16_t mPatch
incrementing PATCH version indicates when backwards compatible bug fixes are made.
Definition ProfilingCommon.hpp:51
uint16_t mMajor
incrementing MAJOR version indicates when incompatible API changes are made.
Definition ProfilingCommon.hpp:47
Copyrights Multiple, All Rights Reserved