1 jls.loader.provide('jls.io.cs.SingleByteEncoder');
  2 
  3 jls.loader.require('jls.lang.ByteBuffer');
  4 
  5 jls.io.cs.SingleByteEncoder = jls.lang.Class.create( /** @lends jls.io.cs.SingleByteEncoder.prototype */
  6 {
  7     /**
  8      * Creates a character encoder.
  9      * 
 10      * @constructs
 11      * @class This class represents a single byte character set encoder.
 12      */
 13     initialize : function(charset, mapping) {
 14         this._charset = charset;
 15         this._mapping = mapping;
 16         this._replacement = '?'.charCodeAt(0);
 17     },
 18     /**
 19      * Encodes a string and returns a buffer.
 20      *
 21      * @param {jls.lang.CharBuffer} input The character buffer to encode.
 22      * @param {jls.lang.ByteBuffer} [buffer] The buffer to use.
 23      * @returns {jls.lang.ByteBuffer} The encoded buffer.
 24      */
 25     encode : function(input, buffer) {
 26     	var output = buffer || jls.lang.ByteBuffer.allocate(input.remaining() + 1);
 27     	while (input.remaining() > 0) {
 28     		var c = input.getChar();
 29     		var b;
 30     		if (c in this._mapping) {
 31     			b = this._mapping[c];
 32     		} else {
 33     			b = this._replacement;
 34     		}
 35     		output.putByte(b);
 36     	}
 37         return output;
 38     }
 39 });
 40 
 41 Object.extend(jls.io.cs.SingleByteEncoder, /** @lends jls.io.cs.SingleByteEncoder */
 42 {
 43     reverseMapping : function(byteToCharCode) {
 44     	var charCodeToByte = [];
 45     	for (var i = 0; i < 256; i++) {
 46     		var cc = byteToCharCode[i];
 47     		if (cc != null) {
 48     			charCodeToByte[cc] = i;
 49     		} else {
 50     			delete byteToCharCode[i];
 51     		}
 52     	}
 53     	return charCodeToByte;
 54     }
 55 });