#
# Copyright (c) 2011, 2013, 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)
