namespace Zipr_SDK
{
typedef std::map<libIRDB::Instruction_t*,Zipr_SDK::RangeAddress_t> InstructionLocationMap_t;

enum ZiprPreference {
	None,
	Must,	
};
class Zipr_t;

class ZiprPluginInterface_t
{
	public:
		virtual void PinningBegin()
		{
		}
		virtual void PinningEnd()
		{
		}
		virtual void DollopBegin()
		{
		}
		virtual void DollopEnd()
		{
		}
		virtual void CallbackLinkingBegin()
		{
		}
		virtual void CallbackLinkingEnd()
		{
		}

		virtual ZiprPreference PlopAddress(
			const RangeAddress_t &jump, const Dollop_t &dollop, Range_t &place)
		{
			return ZiprPreference::None;
		}

		virtual bool WillPluginPlop(libIRDB::Instruction_t*)
		{
			return false;
		}
		virtual size_t WorstCaseInsnSize(libIRDB::Instruction_t*, Zipr_t *)
		{
			return 0;
		}
		virtual RangeAddress_t PlopInstruction(libIRDB::Instruction_t*,
			RangeAddress_t,
			RangeAddress_t &,
			Zipr_t *)
		{
			return 0;
		}
		virtual std::string ToString()
		{
			return "NamelessPlugin";
		}
		virtual ZiprOptionsNamespace_t *RegisterOptions(ZiprOptionsNamespace_t *)
		{
			return new ZiprOptionsNamespace_t("");
		}
};

}