#pragma once

#include <vector>
#include "third_party/libraw/libraw/libraw_types.h"

class checked_buffer_t
{
public:
  // create with internal storage
	checked_buffer_t(short ord, int size);
	checked_buffer_t(short ord, unsigned char *dd, int ss);
	ushort sget2(int offset);
	ushort sget2LL(INT64 offset) { return sget2(int(offset)); }
	void checkoffset(int off);
	unsigned char operator[](int idx);
	unsigned sget4(int offset);
	unsigned sget4LL(INT64 offset) { return sget4(int(offset)); }
	double sgetreal(int type, int offset);
	float sgetrealf(int type, int offset) { return float(sgetreal(type, offset)); }
    unsigned char *data() { return _data; }
 
	int tiff_sget(unsigned save, INT64 *tag_offset, unsigned *tag_id, unsigned *tag_type, INT64 *tag_dataoffset,
		unsigned *tag_datalen, int *tag_dataunitlen);
protected:
  short _order;

 private:
  unsigned char *_data;
  int _len;
  std::vector<unsigned char> storage;
};
