//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef UPDATEHINT_H
#define UPDATEHINT_H
#ifdef _WIN32
#pragma once
#endif



class CUpdateHint : public CObject
{
	#define MAX_NOTIFY_CODES 16

	struct NotifyList_t
	{
		int nCode;
		CMapObjectList Objects;
	};

	public:

		CUpdateHint(void) {}

		//
		// Called by the code that modifies map objects:
		//
		inline void PreUpdateObject(CMapClass *pObject);
		inline void PreUpdateObjects(CMapObjectList *pObjects);

		inline void PostUpdateObject(CMapClass *pObject, int nNotifyCode);
		inline void PostUpdateObjects(CMapObjectList *pObjects, int nNotifyCode);

		inline BoundBox const &GetUpdateRegion(void);
		inline void Reset(void);
		inline void UpdateBounds(BoundBox &bbox);

		//
		// Called by the document when processing an update:
		//
		inline int GetNotifyCodeCount(void);
		inline int GetNotifyCode(int nIndex);

		inline POSITION GetHeadPosition(int nIndex);
		inline CMapClass *GetNext(int nIndex, POSITION &pos);

	protected:

		NotifyList_t m_NotifyList[MAX_NOTIFY_CODES];	// Lists of objects with common notification codes.
		int m_nListEntries;								// Number of items in the notify list.

		BoundBox m_UpdateRegion;						// 3D map extents that were affected by the change.
};


#endif // UPDATEHINT_H