#ifndef STARS_ida_Interface_h
#define STARS_ida_Interface_h

#include <map>


class STARS_IDA_Interface_t: public STARS_Interface_t
{
	public:

		STARS_IDA_Interface_t() {};
		virtual STARS_Segment_t *getseg(const STARS_ea_t &addr)
			{
				segment_t* seg=::getseg(addr);
				return seg2Seg(seg);
			}

		virtual STARS_Segment_t *getnseg(const int &index)
			{
				segment_t* seg=::getnseg(index);
				return seg2Seg(seg);
			}

                virtual int get_segm_qty()
			{
				return ::get_segm_qty();
			}

		virtual STARS_Segment_t *get_next_seg(const STARS_ea_t &addr)
			{
				segment_t* seg=::get_next_seg(addr);
				return seg2Seg(seg);
			}


	private:

		STARS_Segment_t* seg2Seg(segment_t* seg)
			{
				if(!seg)
					return NULL;
				if(segmap[seg]==NULL)
					segmap[seg]=new STARS_IDA_Segment_t(seg);
				return segmap[seg];
			}


	
		std::map<segment_t*, STARS_Segment_t*> segmap;

};


#endif