AJA NTV2 SDK  17.6.0.2675
NTV2 SDK 17.6.0.2675
ntv2nubtypes.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef __NTV2NUBTYPES_H
9 #define __NTV2NUBTYPES_H
10 
11 #include "ntv2endian.h"
12 #include <vector>
13 
14 #if !defined(NTV2_DEPRECATE_16_3)
15  // In SDK 16.3 or later, client/server RPC implementations are plugins, each with their own protocols/versioning
17 #endif // !defined(NTV2_DEPRECATE_16_3)
18 
19 namespace ntv2nub
20 {
21  const bool kDisableByteSwap (true);
22  const bool kEnableByteSwapIfNeeded (false);
23 
24  inline void PUSHU8(const uint8_t inVal, std::vector<uint8_t> & inArr)
25  {
26  inArr.push_back(inVal);
27  }
28 
29  inline void PUSHU16(const uint16_t inVal, std::vector<uint8_t> & inArr, const bool dontSwap = false)
30  {
31  const uint16_t _u16 ((NTV2HostIsBigEndian || dontSwap) ? inVal : NTV2EndianSwap16HtoB(inVal));
32  const UByte * _pU16 (reinterpret_cast<const UByte*>(&_u16));
33  inArr.push_back(_pU16[0]); inArr.push_back(_pU16[1]);
34  }
35 
36  inline void PUSHU32(const uint32_t inVal, std::vector<uint8_t> & inArr, const bool dontSwap = false)
37  {
38  const uint32_t _u32 ((NTV2HostIsBigEndian || dontSwap) ? inVal : NTV2EndianSwap32HtoB(inVal));
39  const UByte * _pU32 (reinterpret_cast<const UByte*>(&_u32));
40  inArr.push_back(_pU32[0]); inArr.push_back(_pU32[1]);
41  inArr.push_back(_pU32[2]); inArr.push_back(_pU32[3]);
42  }
43 
44  inline void PUSHU64(const uint64_t inVal, std::vector<uint8_t> & inArr, const bool dontSwap = false)
45  {
46  const uint64_t _u64 ((NTV2HostIsBigEndian || dontSwap) ? inVal : NTV2EndianSwap64HtoB(inVal));
47  const UByte * _pU64 (reinterpret_cast<const UByte*>(&_u64));
48  inArr.push_back(_pU64[0]); inArr.push_back(_pU64[1]);
49  inArr.push_back(_pU64[2]); inArr.push_back(_pU64[3]);
50  inArr.push_back(_pU64[4]); inArr.push_back(_pU64[5]);
51  inArr.push_back(_pU64[6]); inArr.push_back(_pU64[7]);
52  }
53 
54  inline void POPU8 (uint8_t & outVal, const std::vector<uint8_t> & inArr, std::size_t & inOutNdx)
55  {
56  outVal = inArr.at(inOutNdx++);
57  }
58 
59  inline void POPU16 (uint16_t & outVal, const std::vector<uint8_t> & inArr, std::size_t & inOutNdx, const bool dontSwap = false)
60  {
61  uint16_t _u16(0);
62  UByte * _pU8(reinterpret_cast<UByte*>(&_u16));
63  _pU8[0] = inArr.at(inOutNdx++); _pU8[1] = inArr.at(inOutNdx++);
64  outVal = (NTV2HostIsBigEndian || dontSwap) ? _u16 : NTV2EndianSwap16BtoH(_u16);
65  }
66 
67  inline void POPU32 (uint32_t & outVal, const std::vector<uint8_t> & inArr, std::size_t & inOutNdx, const bool dontSwap = false)
68  {
69  uint32_t _u32(0);
70  UByte * _pU8(reinterpret_cast<UByte*>(&_u32));
71  _pU8[0] = inArr.at(inOutNdx++); _pU8[1] = inArr.at(inOutNdx++);
72  _pU8[2] = inArr.at(inOutNdx++); _pU8[3] = inArr.at(inOutNdx++);
73  outVal = (NTV2HostIsBigEndian || dontSwap) ? _u32 : NTV2EndianSwap32BtoH(_u32);
74  }
75 
76  inline void POPU64 (uint64_t & outVal, const std::vector<uint8_t> & inArr, std::size_t & inOutNdx, const bool dontSwap = false)
77  {
78  uint64_t _u64(0);
79  UByte * _pU8(reinterpret_cast<UByte*>(&_u64));
80  _pU8[0] = inArr.at(inOutNdx++); _pU8[1] = inArr.at(inOutNdx++);
81  _pU8[2] = inArr.at(inOutNdx++); _pU8[3] = inArr.at(inOutNdx++);
82  _pU8[4] = inArr.at(inOutNdx++); _pU8[5] = inArr.at(inOutNdx++);
83  _pU8[6] = inArr.at(inOutNdx++); _pU8[7] = inArr.at(inOutNdx++);
84  outVal = (NTV2HostIsBigEndian || dontSwap) ? _u64 : NTV2EndianSwap64BtoH(_u64);
85  }
86 
87 } // namespace ntv2nub
88 
89 #endif // __NTV2NUBTYPES_H
ntv2nub::POPU32
void POPU32(uint32_t &outVal, const std::vector< uint8_t > &inArr, std::size_t &inOutNdx, const bool dontSwap=false)
Definition: ntv2nubtypes.h:67
NTV2EndianSwap32HtoB
#define NTV2EndianSwap32HtoB(__val__)
Definition: ntv2endian.h:64
NTV2EndianSwap16BtoH
#define NTV2EndianSwap16BtoH(__val__)
Definition: ntv2endian.h:61
ntv2endian.h
Defines a number of handy byte-swapping macros.
ntv2nub::kDisableByteSwap
const bool kDisableByteSwap(true)
ntv2nub::PUSHU64
void PUSHU64(const uint64_t inVal, std::vector< uint8_t > &inArr, const bool dontSwap=false)
Definition: ntv2nubtypes.h:44
NTV2EndianSwap64BtoH
#define NTV2EndianSwap64BtoH(__val__)
Definition: ntv2endian.h:65
ntv2nub::POPU64
void POPU64(uint64_t &outVal, const std::vector< uint8_t > &inArr, std::size_t &inOutNdx, const bool dontSwap=false)
Definition: ntv2nubtypes.h:76
NTV2NubProtocolVersion
ULWord NTV2NubProtocolVersion
Definition: ntv2nubtypes.h:16
ULWord
uint32_t ULWord
Definition: ajatypes.h:256
ntv2nub
Definition: ntv2nubtypes.h:19
ntv2nub::POPU8
void POPU8(uint8_t &outVal, const std::vector< uint8_t > &inArr, std::size_t &inOutNdx)
Definition: ntv2nubtypes.h:54
ntv2nub::PUSHU32
void PUSHU32(const uint32_t inVal, std::vector< uint8_t > &inArr, const bool dontSwap=false)
Definition: ntv2nubtypes.h:36
UByte
uint8_t UByte
Definition: ajatypes.h:251
NTV2EndianSwap64HtoB
#define NTV2EndianSwap64HtoB(__val__)
Definition: ntv2endian.h:66
NTV2EndianSwap16HtoB
#define NTV2EndianSwap16HtoB(__val__)
Definition: ntv2endian.h:62
NTV2EndianSwap32BtoH
#define NTV2EndianSwap32BtoH(__val__)
Definition: ntv2endian.h:63
ntv2nub::kEnableByteSwapIfNeeded
const bool kEnableByteSwapIfNeeded(false)
ntv2nub::POPU16
void POPU16(uint16_t &outVal, const std::vector< uint8_t > &inArr, std::size_t &inOutNdx, const bool dontSwap=false)
Definition: ntv2nubtypes.h:59
NTV2HostIsBigEndian
#define NTV2HostIsBigEndian
Definition: ntv2endian.h:58
ntv2nub::PUSHU16
void PUSHU16(const uint16_t inVal, std::vector< uint8_t > &inArr, const bool dontSwap=false)
Definition: ntv2nubtypes.h:29
ntv2nub::PUSHU8
void PUSHU8(const uint8_t inVal, std::vector< uint8_t > &inArr)
Definition: ntv2nubtypes.h:24