#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

GENSRC_BUFFER :=

GENSRC_BUFFER_TMP := $(JDK_OUTPUTDIR)/gensrc
GENSRC_BUFFER_DST := $(JDK_OUTPUTDIR)/gensrc/java/nio

GENSRC_BUFFER_SRC := $(JDK_TOPDIR)/src/share/classes/java/nio

###

$(GENSRC_BUFFER_DST)/_the.buffer.dir :
	$(ECHO) "Generating buffer classes"
	$(MKDIR) -p $(@D)
	$(TOUCH) $@

define fixRw
	$1_RW := $2
	$1_rwkey := rw
	ifeq (R,$2)
		 $1_rwkey := ro
	endif
endef

define typesAndBits
        # param 1 target
        # param 2 type
        # param 3 BO
	$1_a := a
	$1_A := A

	$1_type := $2

	ifeq ($2, byte)
		$1_x        := b
		$1_Type     := Byte
		$1_fulltype := byte
		$1_Fulltype := Byte
		$1_category := integralType
		$1_LBPV     := 0
	endif

	ifeq ($2, char)
		$1_x        := c
		$1_Type     := Char
		$1_fulltype := character
		$1_Fulltype := Character
		$1_category := integralType
		$1_LBPV     := 1
	endif

	ifeq ($2, short)
		$1_x        := s
		$1_Type     := Short
		$1_fulltype := short
		$1_Fulltype := Short
		$1_category := integralType
		$1_LBPV     := 1
	endif

	ifeq ($2, int)
		$1_a := an
		$1_A := An
		$1_x        := i
		$1_Type     := Int
		$1_fulltype := integer
		$1_Fulltype := Integer
		$1_category := integralType
		$1_LBPV     := 2
	endif

	ifeq ($2, long)
		$1_x        := l
		$1_Type     := Long
		$1_fulltype := long
		$1_Fulltype := Long
		$1_category := integralType
		$1_LBPV     := 3
	endif

	ifeq ($2, float)
		$1_x        := f
		$1_Type     := Float
		$1_fulltype := float
		$1_Fulltype := Float
		$1_category := floatingPointType
		$1_LBPV     := 2
	endif

	ifeq ($2, double)
		$1_x        := d
		$1_Type     := Double
		$1_fulltype := double
		$1_Fulltype := Double
		$1_category := floatingPointType
		$1_LBPV     := 3
	endif

	$1_Swaptype := $$($1_Type)
	$1_memtype := $2
	$1_Memtype := $$($1_Type)

	ifeq ($2, float)
		$1_memtype := int
		$1_Memtype := Int
		ifneq ($3,U)
			$1_Swaptype := Int
			$1_fromBits := Float.intBitsToFloat
			$1_toBits   := Float.floatToRawIntBits
		endif
	endif

	ifeq ($2, double)
		$1_memtype := long
		$1_Memtype := Long
		ifneq ($3,U)
			$1_Swaptype := Long
			$1_fromBits := Double.longBitsToDouble
			$1_toBits   := Double.doubleToRawLongBits
		endif
	endif

	ifeq ($3, S)
		$1_swap := Bits.swap
	endif
endef

define genBinOps
        # param 1 target
        # param 2 type
        # param 3 BO
        # param 4 RW
        # param 5 nbytes
        # param 6 nbytesButOne
	$(call typesAndBits,$1,$2,$3)
	$(call fixRw,$1,$4)
	$1_nbytes := $5
	$1_nbytesButOne := $6
	$1_CMD := $(TOOL_SPP) \
		-Dtype=$$($1_type) \
		-DType=$$($1_Type) \
		-Dfulltype=$$($1_fulltype) \
		-Dmemtype=$$($1_memtype) \
		-DMemtype=$$($1_Memtype) \
		-DfromBits=$$($1_fromBits) \
		-DtoBits=$$($1_toBits) \
		-DLG_BYTES_PER_VALUE=$$($1_LBPV) \
		-DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
		-Dnbytes=$$($1_nbytes) \
		-DnbytesButOne=$$($1_nbytesButOne) \
		-DRW=$$($1_RW) \
		-K$$($1_rwkey) \
		-Da=$$($1_a) \
		-be
endef

define SetupGenBuffer
        # param 1 is for output file
        # param 2 is template dependency
        # param 3-9 are named args.
        #   type :=
        #   BIN  :=
        #   RW   := Mutability (R)ead-only (W)ritable
        #   BO   := (U)nswapped/(S)wapped/(L)ittle/(B)ig
        #
	$(if $3,$1_$(strip $3))
	$(if $4,$1_$(strip $4))
	$(if $5,$1_$(strip $5))
	$(if $6,$1_$(strip $6))
	$(if $7,$1_$(strip $7))
	$(if $8,$1_$(strip $8))
	$(if $9,$1_$(strip $9))
	$(if $(10),$1_$(strip $(10)))
	$(if $(11),$1_$(strip $(11)))
	$(if $(12),$1_$(strip $(12)))
	$(if $(13),$1_$(strip $(13)))
	$(if $(14),$1_$(strip $(14)))
	$(foreach i,3 4 5 6 7 8 9 10 11 12 13 14 15,$(if $($i),$1_$(strip $($i)))$(NEWLINE))
	$(call LogSetupMacroEntry,SetupGenBuffer($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15))
	$(if $(16),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk))

	$(call fixRw,$1,$$($1_RW))
	$(call typesAndBits,$1,$$($1_type),$$($1_BO))

	$1_DST     := $(GENSRC_BUFFER_DST)/$1.java
	$1_SRC     := $(GENSRC_BUFFER_SRC)/$(strip $2).java.template
	$1_SRC_BIN := $(GENSRC_BUFFER_SRC)/$(strip $2)-bin.java.template

	$1_DEP := $$($1_SRC)
	ifneq ($$($1_BIN),1)
		$1_DEP := $$($1_SRC)
		$1_OUT := $$($1_DST)
	else
		$1_DEP += $$($1_SRC) $$($1_SRC_BIN)
		$1_OUT := $(GENSRC_BUFFER_DST)/$1.binop.0.java
	endif

	ifeq ($$($1_BIN),1)
		$(call genBinOps,$1_char,char,$$($1_BO),$$($1_RW),two,one)
		$(call genBinOps,$1_short,short,$$($1_BO),$$($1_RW),two,one)
		$(call genBinOps,$1_int,int,$$($1_BO),$$($1_RW),four,three)
		$(call genBinOps,$1_long,long,$$($1_BO),$$($1_RW),eight,seven)
		$(call genBinOps,$1_float,float,$$($1_BO),$$($1_RW),four,three)
		$(call genBinOps,$1_double,double,$$($1_BO),$$($1_RW),eight,seven)
	endif

$$($1_DST) : $$($1_DEP) $(GENSRC_BUFFER_DST)/_the.buffer.dir
	$(TOOL_SPP) < $$($1_SRC) > $$($1_OUT).tmp \
		-K$$($1_type) \
		-K$$($1_category) \
		-Dtype=$$($1_type) \
		-DType=$$($1_Type) \
		-Dfulltype=$$($1_fulltype) \
		-DFulltype=$$($1_Fulltype) \
		-Dx=$$($1_x) \
		-Dmemtype=$$($1_memtype) \
		-DMemtype=$$($1_Memtype) \
		-DSwaptype=$$($1_Swaptype) \
		-DfromBits=$$($1_fromBits) \
		-DtoBits=$$($1_toBits) \
		-DLG_BYTES_PER_VALUE=$$($1_LBPV) \
		-DBYTES_PER_VALUE="(1 << $$($1_LBPV))" \
		-DBO=$$($1_BO) \
		-Dswap=$$($1_swap) \
		-DRW=$$($1_RW) \
		-K$$($1_rwkey) \
		-Da=$$($1_a) \
		-DA=$$($1_A) \
		-Kbo$$($1_BO)
		$(MV) $$($1_OUT).tmp $$($1_OUT)
# Do the extra bin thing
ifeq ($$($1_BIN),1)
	$(SED) -e '/#BIN/,$$$$d' < $$($1_OUT) > $$($1_DST).tmp
	$(RM) $$($1_OUT)
	$$($1_char_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
	$$($1_short_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
	$$($1_int_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
	$$($1_long_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
	$$($1_float_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
	$$($1_double_CMD) < $$($1_SRC_BIN) >> $$($1_DST).tmp
	$(PRINTF) "}\n" >> $$($1_DST).tmp
	mv $$($1_DST).tmp $$($1_DST)
endif

GENSRC_BUFFER += $$($1_DST)

endef

###

X_BUF :=X-Buffer

$(eval $(call SetupGenBuffer,ByteBuffer,  $(X_BUF),type:=byte,BIN:=1))
$(eval $(call SetupGenBuffer,CharBuffer,  $(X_BUF),type:=char))
$(eval $(call SetupGenBuffer,ShortBuffer, $(X_BUF),type:=short))
$(eval $(call SetupGenBuffer,IntBuffer,   $(X_BUF),type:=int))
$(eval $(call SetupGenBuffer,LongBuffer,  $(X_BUF),type:=long))
$(eval $(call SetupGenBuffer,FloatBuffer, $(X_BUF),type:=float))
$(eval $(call SetupGenBuffer,DoubleBuffer,$(X_BUF),type:=double))

# Buffers whose contents are heap-allocated
# 
HEAP_X_BUF := Heap-X-Buffer

$(eval $(call SetupGenBuffer,HeapByteBuffer,   $(HEAP_X_BUF),type:=byte))
$(eval $(call SetupGenBuffer,HeapByteBufferR,  $(HEAP_X_BUF),type:=byte,RW:=R))
$(eval $(call SetupGenBuffer,HeapCharBuffer,   $(HEAP_X_BUF),type:=char))
$(eval $(call SetupGenBuffer,HeapCharBufferR,  $(HEAP_X_BUF),type:=char,RW:=R))
$(eval $(call SetupGenBuffer,HeapShortBuffer,  $(HEAP_X_BUF),type:=short))
$(eval $(call SetupGenBuffer,HeapShortBufferR, $(HEAP_X_BUF),type:=short,RW:=R))
$(eval $(call SetupGenBuffer,HeapIntBuffer,    $(HEAP_X_BUF),type:=int))
$(eval $(call SetupGenBuffer,HeapIntBufferR,   $(HEAP_X_BUF),type:=int,RW:=R))
$(eval $(call SetupGenBuffer,HeapLongBuffer,   $(HEAP_X_BUF),type:=long))
$(eval $(call SetupGenBuffer,HeapLongBufferR,  $(HEAP_X_BUF),type:=long,RW:=R))
$(eval $(call SetupGenBuffer,HeapFloatBuffer,  $(HEAP_X_BUF),type:=float))
$(eval $(call SetupGenBuffer,HeapFloatBufferR, $(HEAP_X_BUF),type:=float,RW:=R))
$(eval $(call SetupGenBuffer,HeapDoubleBuffer, $(HEAP_X_BUF),type:=double))
$(eval $(call SetupGenBuffer,HeapDoubleBufferR,$(HEAP_X_BUF),type:=double,RW:=R))

# Direct byte buffer
# 
DIRECT_X_BUF := Direct-X-Buffer

$(eval $(call SetupGenBuffer,DirectByteBuffer, $(DIRECT_X_BUF),type:=byte,BIN:=1))
$(eval $(call SetupGenBuffer,DirectByteBufferR,$(DIRECT_X_BUF),type:=byte,BIN:=1,RW:=R))

# Unswapped views of direct byte buffers
#
$(eval $(call SetupGenBuffer,DirectCharBufferU,   $(DIRECT_X_BUF),type:=char,BO:=U))
$(eval $(call SetupGenBuffer,DirectCharBufferRU,  $(DIRECT_X_BUF),type:=char,RW:=R,BO:=U))
$(eval $(call SetupGenBuffer,DirectShortBufferU,  $(DIRECT_X_BUF),type:=short,BO:=U))
$(eval $(call SetupGenBuffer,DirectShortBufferRU, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=U))
$(eval $(call SetupGenBuffer,DirectIntBufferU,    $(DIRECT_X_BUF),type:=int,BO:=U))
$(eval $(call SetupGenBuffer,DirectIntBufferRU,   $(DIRECT_X_BUF),type:=int,RW:=R,BO:=U))
$(eval $(call SetupGenBuffer,DirectLongBufferU,   $(DIRECT_X_BUF),type:=long,BO:=U))
$(eval $(call SetupGenBuffer,DirectLongBufferRU,  $(DIRECT_X_BUF),type:=long,RW:=R,BO:=U))
$(eval $(call SetupGenBuffer,DirectFloatBufferU,  $(DIRECT_X_BUF),type:=float,BO:=U))
$(eval $(call SetupGenBuffer,DirectFloatBufferRU, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=U))
$(eval $(call SetupGenBuffer,DirectDoubleBufferU, $(DIRECT_X_BUF),type:=double,BO:=U))
$(eval $(call SetupGenBuffer,DirectDoubleBufferRU,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=U))

# Swapped views of direct byte buffers
#
$(eval $(call SetupGenBuffer,DirectCharBufferS,   $(DIRECT_X_BUF),type:=char,BO:=S))
$(eval $(call SetupGenBuffer,DirectCharBufferRS,  $(DIRECT_X_BUF),type:=char,RW:=R,BO:=S))
$(eval $(call SetupGenBuffer,DirectShortBufferS,  $(DIRECT_X_BUF),type:=short,BO:=S))
$(eval $(call SetupGenBuffer,DirectShortBufferRS, $(DIRECT_X_BUF),type:=short,RW:=R,BO:=S))
$(eval $(call SetupGenBuffer,DirectIntBufferS,    $(DIRECT_X_BUF),type:=int,BO:=S))
$(eval $(call SetupGenBuffer,DirectIntBufferRS,   $(DIRECT_X_BUF),type:=int,RW:=R,BO:=S))
$(eval $(call SetupGenBuffer,DirectLongBufferS,   $(DIRECT_X_BUF),type:=long,BO:=S))
$(eval $(call SetupGenBuffer,DirectLongBufferRS,  $(DIRECT_X_BUF),type:=long,RW:=R,BO:=S))
$(eval $(call SetupGenBuffer,DirectFloatBufferS,  $(DIRECT_X_BUF),type:=float,BO:=S))
$(eval $(call SetupGenBuffer,DirectFloatBufferRS, $(DIRECT_X_BUF),type:=float,RW:=R,BO:=S))
$(eval $(call SetupGenBuffer,DirectDoubleBufferS, $(DIRECT_X_BUF),type:=double,BO:=S))
$(eval $(call SetupGenBuffer,DirectDoubleBufferRS,$(DIRECT_X_BUF),type:=double,RW:=R,BO:=S))

# Big-endian views of byte buffers
#
BYTE_X_BUF := ByteBufferAs-X-Buffer

$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferB,   $(BYTE_X_BUF),type:=char,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRB,  $(BYTE_X_BUF),type:=char,RW:=R,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferB,  $(BYTE_X_BUF),type:=short,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRB, $(BYTE_X_BUF),type:=short,RW:=R,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferB,    $(BYTE_X_BUF),type:=int,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRB,   $(BYTE_X_BUF),type:=int,RW:=R,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferB,   $(BYTE_X_BUF),type:=long,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRB,  $(BYTE_X_BUF),type:=long,RW:=R,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferB,  $(BYTE_X_BUF),type:=float,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRB, $(BYTE_X_BUF),type:=float,RW:=R,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferB, $(BYTE_X_BUF),type:=double,BO:=B))
$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRB,$(BYTE_X_BUF),type:=double,RW:=R,BO:=B))

# Little-endian views of byte buffers
#
$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferL,   $(BYTE_X_BUF),type:=char,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsCharBufferRL,  $(BYTE_X_BUF),type:=char,RW:=R,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferL,  $(BYTE_X_BUF),type:=short,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsShortBufferRL, $(BYTE_X_BUF),type:=short,RW:=R,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferL,    $(BYTE_X_BUF),type:=int,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsIntBufferRL,   $(BYTE_X_BUF),type:=int,RW:=R,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferL,   $(BYTE_X_BUF),type:=long,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsLongBufferRL,  $(BYTE_X_BUF),type:=long,RW:=R,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferL,  $(BYTE_X_BUF),type:=float,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsFloatBufferRL, $(BYTE_X_BUF),type:=float,RW:=R,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferL, $(BYTE_X_BUF),type:=double,BO:=L))
$(eval $(call SetupGenBuffer,ByteBufferAsDoubleBufferRL,$(BYTE_X_BUF),type:=double,RW:=R,BO:=L))

###

$(GENSRC_BUFFER) : $(BUILD_TOOLS)
