#ifndef IVP_TEMPLATE_SURBUILD_LEDGE_SOUP_INCLUDED
#define IVP_TEMPLATE_SURBUILD_LEDGE_SOUP_INCLUDED

enum IVP_SURBUILD_LEDGE_SOUP_MERGE_POINT_TYPES {
    IVP_SLMP_NO_MERGE,
    IVP_SLMP_MERGE_AND_REALLOCATE,
    IVP_SLMP_MERGE_NO_REALLOCATE
};

class IVP_Template_Surbuild_LedgeSoup {
public:
    /********************************************************************************
     *  Parameter:    build_root_convex_hull
     *  Default:      IVP_FALSE
     *	Description:  if true than an extra convex hull around the whole object is generated
     *******************************************************************************/
    IVP_BOOL build_root_convex_hull;

    /********************************************************************************
     *  Parameter:    free_input_compact_ledges
     *  Default:      IVP_TRUE
     *	Description:  if true input data compact_ledges are freed using ivp_free_aligned()
     *******************************************************************************/
    IVP_BOOL free_input_compact_ledges;

    /********************************************************************************
     *  Parameter:    link_to_input_compact_ledges
     *  Default:      IVP_FALSE
     *	Description:  if true input data is reused by linking to it
     *  Note:	      if true than assert( !free_input_compact_ledges );
     *******************************************************************************/
    IVP_BOOL link_to_input_compact_ledges;

    /********************************************************************************
     *  Parameter:    merge_points
     *  Default:      IVP_SLMP_MERGE_AND_REALLOCATE
     *	Description:  true compile tries to merge all equal points
     *  Note:	      Only input ledges which are copied ( and not linked to ) are taken into account
     *	Note:	      For reasons of speed
     *  Attention:    The current implementation limits the number of points to 65k
     *		      If your resulting ledge contains more points, the engine will crash
     *	Values:	    IVP_SLMP_NO_MERGE	    result needs more memory but compile is fast
     *		    IVP_SLMP_MERGE_AND_REALLOCATE results needs less memory
     *		    IVP_SLMP_MERGE_NO_REALLOCATE result is placed in a chunk of memory
     *				same size as IVP_SLMP_NO_MERGE, but actually needs only
     *				same size as IVP_SLMP_MERGE_AND_REALLOCATE
     *				good for creating intermediate results
     *******************************************************************************/
    IVP_SURBUILD_LEDGE_SOUP_MERGE_POINT_TYPES merge_points;

    IVP_Template_Surbuild_LedgeSoup()
	{
	    build_root_convex_hull = IVP_FALSE;
		link_to_input_compact_ledges = IVP_FALSE;
		free_input_compact_ledges = IVP_TRUE;
#ifdef WIN32
	    merge_points = IVP_SLMP_MERGE_AND_REALLOCATE;
#else
		merge_points = IVP_SLMP_NO_MERGE;
#endif
	};
};

#endif // IVP_TEMPLATE_SURBUILD_LEDGE_SOUP_INCLUDED