#pragma once

#include "fs/IStreamSink.h"
#include "tl/flag_set2.h"
#include "fs/Api.h"

namespace fs
{

class FS_API ISink : public IStreamSink
{
public:
	enum class Flag
	{
	};
	typedef tl::flag_set2<Flag> Flags;

	ISink() = default;
	~ISink() override = default;
	
	ISink(ISink&&) = default;
	ISink& operator=(ISink&&) = default;

	//changes the sink cursor either to an absolute offset or relative one
	//NOTE!!! if the cursor is moved beyond the sink size, the size is increased to fit it.
	virtual void seekBeg(uint64_t offset) = 0;
	virtual void seekRel(int64_t offset) = 0;

	//returns the sink cursor. Always between 0 and size
	virtual uint64_t tell() const = 0;
};

}
