libptpmgmt  1.3
libptpmgmt library that provides the functionality of linuxptp pmc
bin.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-3.0-or-later
2  SPDX-FileCopyrightText: Copyright © 2021 Erez Geva <ErezGeva2@gmail.com> */
3 
12 #ifndef __PTPMGMT_BIN_H
13 #define __PTPMGMT_BIN_H
14 
15 #ifdef __cplusplus
16 #include "name.h"
17 
18 __PTPMGMT_NAMESPACE_BEGIN
19 
20 const size_t EUI48 = 6;
21 const size_t EUI64 = 8;
27 class Binary
28 {
29  private:
30  uint8_t *m_buf; /* Used buffer */
31  size_t m_alloc; /* Allocation size */
32  size_t m_size; /* Binary size */
33  void init();
34  bool iResize(size_t newAllocSize);
35  public:
36  Binary();
37  ~Binary();
42  Binary(const Binary &rhs);
48  Binary(const void *buf, const size_t length);
54  Binary(const size_t length, uint8_t set = 0);
59  Binary(const std::string &string);
65  Binary &operator=(const Binary &rhs);
70  size_t length() const { return m_size; }
75  size_t size() const { return m_size; }
80  bool empty() const { return m_size == 0; }
85  const uint8_t *get() const { return m_buf; }
92  std::string getBinString() const { return std::string((char *)m_buf, m_size); }
99  Binary &setBin(const void *buf, const size_t length);
107  Binary &setBin(const Binary &rhs);
115  Binary &setBin(const std::string &string);
123  Binary &setBin(const size_t position, const uint8_t value);
129  const uint8_t getBin(const size_t position) const;
136  uint8_t &operator [](const size_t position);
141  Binary &resize(const size_t length);
145  Binary &clear() { m_size = 0; return *this; }
150  void copy(uint8_t *target) const { memcpy(target, m_buf, m_size); }
157  Binary &operator += (const uint8_t octet) { return append(octet); }
163  Binary &append(const uint8_t octet);
170  Binary &operator += (const Binary &rhs) { return append(rhs); }
176  Binary &append(const Binary &rhs);
184  std::string toIp() const;
191  bool fromIp(const std::string &string);
199  bool fromIp(const std::string &string, int domain);
206  std::string toId(const std::string &sep = ":") const {
207  return bufToId(m_buf, m_size, sep);
208  }
217  static std::string bufToId(const uint8_t *id, size_t length);
226  static std::string bufToId(const uint8_t *id, size_t length,
227  const std::string &sep);
234  bool fromId(const std::string &string);
240  bool fromMac(const std::string &string) { return fromId(string) && isMacLen(); }
245  bool isMacLen() const { return m_size == EUI48 || m_size == EUI64; }
250  bool eui48ToEui64();
256  bool fromHex(const std::string &hex);
261  std::string toHex() const { return bufToHex(m_buf, m_size); }
268  static std::string bufToHex(const uint8_t *bin, size_t length);
280  bool fromBase64(const std::string &bin64, bool pad = false);
291  std::string toBase64(bool pad = true, char v62 = '+', char v63 = '/');
297  bool operator==(const Binary &rhs) const { return eq(rhs); }
303  bool eq(const Binary &rhs) const;
309  bool operator<(const Binary &rhs) const { return less(rhs); }
315  bool less(const Binary &rhs) const;
316 };
317 
318 __PTPMGMT_NAMESPACE_END
319 #else /* __cplusplus */
320 #error "this header is for C++ and scripts use only, NOT for C"
321 #endif /* __cplusplus */
322 
323 #endif /* __PTPMGMT_BIN_H */
__PTPMGMT_NAMESPACE_BEGIN const size_t EUI48
Definition: bin.h:20
const size_t EUI64
Definition: bin.h:21
Hold octets.
Definition: bin.h:28
Binary & setBin(const size_t position, const uint8_t value)
std::string toHex() const
Definition: bin.h:261
Binary & operator+=(const uint8_t octet)
Definition: bin.h:157
Binary & operator=(const Binary &rhs)
std::string getBinString() const
Definition: bin.h:92
std::string toId(const std::string &sep=":") const
Definition: bin.h:206
Binary & resize(const size_t length)
Binary & append(const uint8_t octet)
Binary & setBin(const void *buf, const size_t length)
static std::string bufToHex(const uint8_t *bin, size_t length)
Binary & append(const Binary &rhs)
bool fromMac(const std::string &string)
Definition: bin.h:240
bool fromBase64(const std::string &bin64, bool pad=false)
static std::string bufToId(const uint8_t *id, size_t length)
static std::string bufToId(const uint8_t *id, size_t length, const std::string &sep)
Binary(const std::string &string)
bool fromIp(const std::string &string, int domain)
size_t size() const
Definition: bin.h:75
Binary(const size_t length, uint8_t set=0)
bool isMacLen() const
Definition: bin.h:245
std::string toBase64(bool pad=true, char v62='+', char v63='/')
Binary & setBin(const std::string &string)
bool fromHex(const std::string &hex)
bool eq(const Binary &rhs) const
bool fromIp(const std::string &string)
uint8_t & operator[](const size_t position)
Binary & setBin(const Binary &rhs)
Binary(const void *buf, const size_t length)
Binary & clear()
Definition: bin.h:145
size_t length() const
Definition: bin.h:70
const uint8_t getBin(const size_t position) const
bool fromId(const std::string &string)
Binary(const Binary &rhs)
void copy(uint8_t *target) const
Definition: bin.h:150
bool empty() const
Definition: bin.h:80
std::string toIp() const
bool operator<(const Binary &rhs) const
Definition: bin.h:309
bool eui48ToEui64()
bool operator==(const Binary &rhs) const
Definition: bin.h:297
bool less(const Binary &rhs) const
const uint8_t * get() const
Definition: bin.h:85
Define name space.