/*
 * bytestr.h
 *
 *  Created on: Apr 20, 2018
 *      Author: armin
 */

#ifndef BYTESTR_H_
#define BYTESTR_H_

#include <stddef.h>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

namespace util {

using byte = unsigned char;

class bytestr {
 public:
  bytestr() = default;
  bytestr(const string fromHex);
  bytestr(const byte* fromBytes, int len);

  const byte* byteArr() const;
  string toHex() const;

  void set(const string fromHex);
  void set(const byte* fromBytes, int len);

  const byte& operator[](const int index) const;

  size_t size(void) const;

  virtual ~bytestr() = default;

  friend ostream& operator<<(ostream& os, const bytestr& bs);

 private:
  vector<byte> bytes;
};

} /* namespace util */

#endif /* BYTESTR_H_ */
