diff -r fd16c54261b3 -r 90ce3da70b43 jdk/make/java/nio/genBuffer.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/java/nio/genBuffer.sh Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,166 @@ +#! /bin/sh + +# +# Copyright 2000-2005 Sun Microsystems, Inc. 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. Sun designates this +# particular file as subject to the "Classpath" exception as provided +# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# + +# Generate concrete buffer classes + +# Required environment variables +# NAWK SED SPP To invoke tools +# TYPE Primitive type +# SRC Source file +# DST Destination file +# +# Optional environment variables +# RW Mutability: R(ead only), W(ritable) +# BO Byte order: B(ig), L(ittle), S(wapped), U(nswapped) +# BIN Defined => generate binary-data access methods + +type=$TYPE +rw=$RW +rwkey=XX + +case $type in + char) fulltype=character;; + *) fulltype=$type;; +esac + +case $type in + byte) LBPV=0;; + char | short) LBPV=1;; + int | float) LBPV=2;; + long | double) LBPV=3;; +esac + +typesAndBits() { + + type="$1"; BO="$2" + memtype=$type; swaptype=$type; frombits=; tobits= + + case $type in + float) memtype=int + if [ x$BO != xU ]; then + swaptype=int + fromBits=Float.intBitsToFloat + toBits=Float.floatToRawIntBits + fi;; + double) memtype=long + if [ x$BO != xU ]; then + swaptype=long + fromBits=Double.longBitsToDouble + toBits=Double.doubleToRawLongBits + fi;; + esac + + echo memtype=$memtype swaptype=$swaptype fromBits=$fromBits toBits=$toBits + + echo $type $fulltype $memtype $swaptype \ + | $NAWK '{ type = $1; fulltype = $2; memtype = $3; swaptype = $4; + x = substr(type, 1, 1); + Type = toupper(x) substr(type, 2); + Fulltype = toupper(x) substr(fulltype, 2); + Memtype = toupper(substr(memtype, 1, 1)) substr(memtype, 2); + Swaptype = toupper(substr(swaptype, 1, 1)) substr(swaptype, 2); + printf("Type=%s x=%s Fulltype=%s Memtype=%s Swaptype=%s ", + Type, x, Fulltype, Memtype, Swaptype); }' + + echo "swap=`if [ x$BO = xS ]; then echo Bits.swap; fi`" + +} + +eval `typesAndBits $type $BO` + +a=`if [ $type = int ]; then echo an; else echo a; fi` +A=`if [ $type = int ]; then echo An; else echo A; fi` + +if [ "x$rw" = xR ]; then rwkey=ro; else rwkey=rw; fi + +set -e + +$SPP <$SRC >$DST \ + -K$type \ + -Dtype=$type \ + -DType=$Type \ + -Dfulltype=$fulltype \ + -DFulltype=$Fulltype \ + -Dx=$x \ + -Dmemtype=$memtype \ + -DMemtype=$Memtype \ + -DSwaptype=$Swaptype \ + -DfromBits=$fromBits \ + -DtoBits=$toBits \ + -DLG_BYTES_PER_VALUE=$LBPV \ + -DBYTES_PER_VALUE="(1 << $LBPV)" \ + -DBO=$BO \ + -Dswap=$swap \ + -DRW=$rw \ + -K$rwkey \ + -Da=$a \ + -DA=$A \ + -Kbo$BO + +if [ $BIN ]; then + + genBinOps() { + type="$1" + Type=`echo $1 | $NAWK '{ print toupper(substr($1, 1, 1)) substr($1, 2) }'` + fulltype="$2" + LBPV="$3" + nbytes="$4" + nbytesButOne="$5" + a=`if [ $type = int ]; then echo an; else echo a; fi` + src=$6 + eval `typesAndBits $type` + $SPP <$src \ + -Dtype=$type \ + -DType=$Type \ + -Dfulltype=$fulltype \ + -Dmemtype=$memtype \ + -DMemtype=$Memtype \ + -DfromBits=$fromBits \ + -DtoBits=$toBits \ + -DLG_BYTES_PER_VALUE=$LBPV \ + -DBYTES_PER_VALUE="(1 << $LBPV)" \ + -Dnbytes=$nbytes \ + -DnbytesButOne=$nbytesButOne \ + -DRW=$rw \ + -K$rwkey \ + -Da=$a \ + -be + } + + mv $DST $DST.tmp + sed -e '/#BIN/,$d' <$DST.tmp >$DST + rm -f $DST.tmp + binops=`dirname $SRC`/`basename $SRC .java`-bin.java + genBinOps char character 1 two one $binops >>$DST + genBinOps short short 1 two one $binops >>$DST + genBinOps int integer 2 four three $binops >>$DST + genBinOps long long 3 eight seven $binops >>$DST + genBinOps float float 2 four three $binops >>$DST + genBinOps double double 3 eight seven $binops >>$DST + echo '}' >>$DST + +fi