Program Listing for File CipString.h

Return to documentation for file (src/cip/CipString.h)

//
// Created by Aleksey Timin on 12/4/19.
//

#ifndef EIPSCANNER_CIP_STRINGS_H
#define EIPSCANNER_CIP_STRINGS_H

#include <cstring>
#include <string>
#include <vector>
#include "Types.h"

namespace eipScanner {
namespace cip {
    template <typename T>
    class CipBaseString {
    public:
        CipBaseString() = default;
        explicit CipBaseString(const std::string& string) {
            _length = string.size();
            uint8_t buffer[_length];
            std::memcpy(buffer, string.data(), _length);

            _data = std::vector<uint8_t>(buffer, buffer + _length);
        }

        CipBaseString(const std::vector<uint8_t>& data) {
            _length = data.size();
            _data = data;
        }

        ~CipBaseString() = default;

        std::string toStdString() const {
            char buffer[_length];
            std::memcpy(buffer, _data.data(), _length);

            return std::string(buffer, buffer + _length);
        }

        T getLength() const {
            return _length;
        }

        const std::vector<uint8_t> &getData() const {
            return _data;
        }

    private:
        T _length;
        std::vector<uint8_t> _data;
    };

    using CipShortString = CipBaseString<CipUsint>;
    using CipString = CipBaseString<CipUint>;
}
}

#endif  // EIPSCANNER_STRINGS_H