Program Listing for File Buffer.h¶
↰ Return to documentation for file (src/utils/Buffer.h)
//
// Created by Aleksey Timin on 11/16/19.
//
#ifndef EIPSCANNER_UTILS_BUFFER_H
#define EIPSCANNER_UTILS_BUFFER_H
#include <cstddef>
#include <cstdint>
#include <vector>
#include "cip/CipString.h"
#include "cip/CipRevision.h"
#include "sockets/EndPoint.h"
namespace eipScanner {
namespace utils {
class Buffer {
public:
explicit Buffer(size_t capacity);
explicit Buffer(const std::vector<uint8_t>& data);
Buffer();
Buffer& operator << (uint8_t val);
Buffer& operator >> (uint8_t& val);
Buffer& operator << (int8_t val);
Buffer& operator >> (int8_t& val);
Buffer& operator << (uint16_t val);
Buffer& operator >> (uint16_t& val);
Buffer& operator << (int16_t val);
Buffer& operator >> (int16_t& val);
Buffer& operator << (uint32_t val);
Buffer& operator >> (uint32_t& val);
Buffer& operator << (int32_t val);
Buffer& operator >> (int32_t& val);
Buffer& operator << (uint64_t val);
Buffer& operator >> (uint64_t& val);
Buffer& operator << (int64_t val);
Buffer& operator >> (int64_t& val);
Buffer& operator << (float val);
Buffer& operator >> (float & val);
Buffer& operator << (double val);
Buffer& operator >> (double& val);
Buffer& operator << (const std::vector<uint8_t>& val);
Buffer& operator >> (std::vector<uint8_t>& val);
Buffer& operator << (const std::vector<uint16_t>& val);
Buffer& operator >> (std::vector<uint16_t>& val);
template <typename T>
utils::Buffer& operator<<(const cip::CipBaseString<T>& cipSting) {
return *this << cipSting.getLength() << cipSting.getData();
}
template <typename T>
utils::Buffer& operator>>(cip::CipBaseString<T>& cipSting) {
T length = 0;
*this >> length;
std::vector<uint8_t> data(length);
*this >> data;
cipSting = cip::CipBaseString<T>(data);
return *this;
}
Buffer& operator << (cip::CipRevision v);
Buffer& operator >> (cip::CipRevision& val);
Buffer& operator << (sockets::EndPoint v);
Buffer& operator >> (sockets::EndPoint& val);
std::vector<uint8_t> data() const { return _buffer; }
size_t size() const { return _buffer.size(); }
size_t pos() const { return _position; }
bool isValid() const { return _position <= _buffer.size(); }
bool empty() const { return _position >= _buffer.size(); }
private:
std::vector<uint8_t> _buffer;
size_t _position;
};
}
}
#endif // EIPSCANNER_BUFFER_H