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

#
# $Log: float-conv.desc,v $
# Revision 1.3  1994/02/12  19:36:51  thoth
# Rehack of template operation specifications.
#
# Revision 1.2  1993/11/17  18:32:16  thoth
# forward convolutions are now supported.
# template reductions are now supported.
# minimax ring products are now supported.
#
# Revision 1.1  1993/09/15  13:02:58  thoth
# Initial revision
#
# Revision 1.2  93/05/27  11:41:03  thoth
# Copyright Notices
# 
# Revision 1.1  93/05/26  17:16:30  thoth
# Initial revision
# 
# Revision 1.2  93/05/18  21:44:57  thoth
# New more descriptive names for standard convolutions.
# 
# Revision 1.1  93/03/18  11:23:20  thoth
# Initial revision
# 

convolution linear_product zero=0 I(float) I(float) T(float)
init:	RTYPE	a = ZERO;
accum:	a += IVAL * TVAL;
final:	IRESULT = a;
end

convolution linear_product zero=0 I(float) T(float) I(float)
accum:	a += IVAL * TVAL;
final:	IRESULT = a;
init:	RTYPE	a = ZERO;
accvar:	IRESULT += IVAL*TVAL;
end

#

convolution addmax_product zero=-infinity() I(float) I(float) T(float)
init:	RTYPE	a=ZERO;
accum:	register IBTYPE ival = IVAL; if (ival == ZERO) continue; RTYPE temp = ival+TVAL; if (temp > a) a = temp;
accvar:	RTYPE temp = IVAL+TVAL; if (temp > a) a = temp;
final:	IRESULT = a;
end

convolution addmax_product zero=-infinity() I(float) T(float) I(float)
accum:	register IBTYPE ival = IVAL; if (ival == ZERO) continue; RTYPE temp = ival+TVAL; if (temp > a) a = temp;
final:	IRESULT = a;
init:	RTYPE	a=ZERO;
accvar:	RTYPE temp = IVAL+TVAL; if (temp > IRESULT) IRESULT = temp;
end

#

convolution addmin_product zero=infinity() I(float) I(float) T(float)
init:	RTYPE	a=ZERO;
accum:	register IBTYPE ival = IVAL; if (ival == ZERO) continue; RTYPE temp = ival+TVAL; if (temp < a) a = temp;
accvar:	RTYPE temp = IVAL+TVAL; if (temp < a) a = temp;
final:	IRESULT = a;
end

convolution addmin_product zero=infinity() I(float) T(float) I(float)
accum:	register IBTYPE ival = IVAL; if (ival == ZERO) continue; RTYPE temp = ival+TVAL; if (temp < a) a = temp;
final:	IRESULT = a;
init:	RTYPE	a=ZERO;
accvar:	RTYPE temp = IVAL+TVAL; if (temp < IRESULT) IRESULT = temp;
end

#

convolution multmax_product zero=-infinity() I(float) I(float) T(float)
init:	RTYPE	a=ZERO;
accum:	RTYPE temp = IVAL*TVAL; if (temp > a) a = temp;
final:	IRESULT = a;
end

convolution multmax_product zero=-infinity() I(float) T(float) I(float)
accum:	RTYPE temp = IVAL*TVAL; if (temp > a) a = temp;
final:	IRESULT = a;
init:	RTYPE	a=ZERO;
accvar:	RTYPE temp = IVAL*TVAL; if (temp > IRESULT) IRESULT = temp;
end

#

convolution multmin_product zero=infinity() I(float) I(float) T(float)
init:	RTYPE	a=ZERO;
accum:	RTYPE temp = IVAL*TVAL; if (temp < a) a = temp;
final:	IRESULT = a;
end

convolution multmin_product zero=infinity() I(float) T(float) I(float)
accum:	RTYPE temp = IVAL*TVAL; if (temp < a) a = temp;
final:	IRESULT = a;
init:	RTYPE	a=ZERO;
accvar:	RTYPE temp = IVAL*TVAL; if (temp < IRESULT) IRESULT = temp;
end

#
#

reduction sum zero=0 I(float) T(float)
accum:	IRESULT += TVAL;
end

reduction max zero=-infinity() I(float) T(float)
accum:	if (TVAL>IRESULT) IRESULT = TVAL;
end

reduction min zero=infinity() I(float) T(float)
accum:	if (TVAL<IRESULT) IRESULT = TVAL;
end
