// Emacs: -*- C++ -*-

//
//	Copyright 1993, Center for Computer Vision and Visualization,
//	University of Florida.  All rights reserved.
//

static char copyright[] = "Copyright 1993, Center for Computer Vision and Visualization,\nUniversity of Florida.  All rights reserved.\n";

// Emacs -*- C++ -*-

static char IntDDTempl_rcsid[] = "$Id: IntDDTempl.c,v 1.9 1994/09/16 14:57:11 thoth Exp $";

//
// $Log: IntDDTempl.c,v $
// Revision 1.9  1994/09/16  14:57:11  thoth
// more DOS-inspired renaming.
//
// Revision 1.8  1994/08/22  15:20:29  thoth
// DOS-inspired name rework.
//
// Revision 1.7  1994/07/25  17:26:39  thoth
// Name sanitization
//
// Revision 1.6  1994/02/12  19:37:41  thoth
// Need min and max for pointwise operations.
//
// Revision 1.5  1994/01/07  15:10:00  thoth
// Image class is now CoreImage and named image types are
// Image<P,T>.
//
// Revision 1.4  1993/11/17  18:22:03  thoth
// IPSIter is now PSIter<IntPoint>.
// sample template reduction operation is no longer needed.
// urk was causing problems through name conflicts.
//
// Revision 1.3  1993/10/05  19:33:08  thoth
// Move to new Closure naming convention.
//
// Revision 1.2  1993/09/27  15:51:21  thoth
// Prototype template reduction operation.
//
// Revision 1.1  93/09/15  12:54:32  thoth
// Initial revision
// 
// Revision 1.5  93/05/27  11:36:26  thoth
// Copyright Notices
// 
// Revision 1.4  93/05/26  17:01:14  thoth
// constructors that specify pointsets aren't supported right now.
// 
// Revision 1.3  93/04/29  11:20:11  thoth
// Convolutions now know about VectorDIs.
// 
// Revision 1.2  93/04/08  13:13:18  thoth
// *** empty log message ***
// 
// Revision 1.1  93/03/18  11:03:44  thoth
// Initial revision
// 

#include <limits.h>
#include <values.h>

#include "PSIter.h"

#include "InvDT.h"
#include "ClosureDT.h"
#include "IntDDTempl.h"

#include "VectorI.h"
#include "ImageIter.h"


template <class T>
inline T max(T a, T b)
{
    return (a<b)?b:a;
}

template <class T>
inline T min(T a, T b)
{
    return (a<b)?a:b;
}
#include "IntConv.c"


class urk: public IA_ClosureDT<IA_Image<IA_Point<int>,int> > {
  public:
    urk()
    :IA_ClosureDT<IA_Image<IA_Point<int>,int> >(IA_Set<IA_Point<int> >()) {}
    IA_Image<IA_Point<int>,int> operator()(const IA_Point<int>&) const { return IA_Image<IA_Point<int>,int>(); }
    IA_ClosureDT<IA_Image<IA_Point<int>,int> > *clone_self() const { return 0; }
    IA_BaseDT<IA_Image<IA_Point<int>,int> > *restricted_to(const IA_Set<IA_Point<int> > &) const { return new urk(); }
};

typedef IA_Image<IA_Point<int>,int> (*IDIfunc)(const IA_Point<int>&);

static void dummy1()
{
    IA_Set<IA_Point<int> >	ps;
    IA_Image<IA_Point<int>,int>	im;
    IA_IntDDTemplate	//t1(ps, im),
	t2(0,im),
//	t3(ps,(IA_Image<IA_Point<int>,int>(*)(const IA_Point<int>&))0),
#if 0
	t4(0,(IA_Image<IA_Point<int>,int>
	      (*)
	      (const IA_Point<int>&)
	      )0),
#else
	t4(0,(IDIfunc)0),
#endif
	t5(*(IA_ClosureDT<IA_Image<IA_Point<int>,int> >*)0);
}
