/**
*******************************************************************************
* Copyright (C) 2007, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
*
*******************************************************************************
*/ 
package com.ibm.icu.charset;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.IntBuffer;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;

class CharsetUTF32BE extends CharsetUTF32 {
    public CharsetUTF32BE(String icuCanonicalName, String javaCanonicalName, String[] aliases){
        super(icuCanonicalName, javaCanonicalName, aliases);
    }
    class CharsetDecoderUTF32BE extends CharsetDecoderUTF32{
        
        public CharsetDecoderUTF32BE(CharsetICU cs) {
            super(cs);
            mode=1;
            bom=1;
        }
        protected CoderResult decodeLoopImpl(ByteBuffer source, CharBuffer target, IntBuffer offsets, boolean flush){
            return decodeLoopUTF32BE(source, target, offsets, flush);
        }
        protected int getChar(byte[] bytes, int length){
            int i=0, ch=0;
            while (i<length){
                ch |= (bytes[i] & UConverterConstants.UNSIGNED_BYTE_MASK) << ((3-i) * 8);
                i++;
            }
            return ch;
        }
    }
    public CharsetDecoder newDecoder() {
        return new CharsetDecoderUTF32BE(this);
    }
    class CharsetEncoderUTF32BE extends CharsetEncoderUTF32{

        public CharsetEncoderUTF32BE(CharsetICU cs) {
            super(cs);
            implReset();
        }

        protected void implReset() {
            super.implReset();
            fromUnicodeStatus = 0;
            writeBOM = false;
        }
    }
    public CharsetEncoder newEncoder() {
        return new CharsetEncoderUTF32BE(this);
    }
}
