#
# 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_streams  := streamableType
                $1_streamtype := int
                $1_Streamtype := Int
		$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) \
		-K$$($1_streams) \
		-Dtype=$$($1_type) \
		-DType=$$($1_Type) \
		-Dfulltype=$$($1_fulltype) \
		-DFulltype=$$($1_Fulltype) \
                -Dstreamtype=$$($1_streamtype) \
                -DStreamtype=$$($1_Streamtype) \
		-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)
