295 case JISX0208_1983:
296 if (sp + inputSize + 1 > sl)
297 return CoderResult.UNDERFLOW;
298 b2 = sa[sp + inputSize++] & 0xff;
299 c = dec0208.decodeDouble(b1,b2);
300 if (c == UNMAPPABLE_DECODING)
301 return CoderResult.unmappableForLength(inputSize);
302 da[dp++] = c;
303 break;
304 case JISX0212_1990:
305 if (sp + inputSize + 1 > sl)
306 return CoderResult.UNDERFLOW;
307 b2 = sa[sp + inputSize++] & 0xff;
308 c = dec0212.decodeDouble(b1,b2);
309 if (c == UNMAPPABLE_DECODING)
310 return CoderResult.unmappableForLength(inputSize);
311 da[dp++] = c;
312 break;
313 case JISX0201_1976_KANA:
314 case SHIFTOUT:
315 if (b1 > 0x60) {
316 return CoderResult.malformedForLength(inputSize);
317 }
318 da[dp++] = (char)(b1 + 0xff40);
319 break;
320 }
321 sp += inputSize;
322 }
323 return CoderResult.UNDERFLOW;
324 } finally {
325 src.position(sp - src.arrayOffset());
326 dst.position(dp - dst.arrayOffset());
327 }
328 }
329
330 private CoderResult decodeBufferLoop(ByteBuffer src,
331 CharBuffer dst)
332 {
333 int mark = src.position();
334 int b1 = 0, b2 = 0, b3 = 0, b4=0;
335 char c = UNMAPPABLE_DECODING;
416 return CoderResult.UNDERFLOW;
417 b2 = src.get() & 0xff;
418 inputSize++;
419 c = dec0208.decodeDouble(b1,b2);
420 if (c == UNMAPPABLE_DECODING)
421 return CoderResult.unmappableForLength(inputSize);
422 dst.put(c);
423 break;
424 case JISX0212_1990:
425 if (!src.hasRemaining())
426 return CoderResult.UNDERFLOW;
427 b2 = src.get() & 0xff;
428 inputSize++;
429 c = dec0212.decodeDouble(b1,b2);
430 if (c == UNMAPPABLE_DECODING)
431 return CoderResult.unmappableForLength(inputSize);
432 dst.put(c);
433 break;
434 case JISX0201_1976_KANA:
435 case SHIFTOUT:
436 if (b1 > 0x60) {
437 return CoderResult.malformedForLength(inputSize);
438 }
439 dst.put((char)(b1 + 0xff40));
440 break;
441 }
442 mark += inputSize;
443 }
444 return CoderResult.UNDERFLOW;
445 } finally {
446 src.position(mark);
447 }
448 }
449
450 // Make some protected methods public for use by JISAutoDetect
451 public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
452 if (src.hasArray() && dst.hasArray())
453 return decodeArrayLoop(src, dst);
454 else
455 return decodeBufferLoop(src, dst);
456 }
|
295 case JISX0208_1983:
296 if (sp + inputSize + 1 > sl)
297 return CoderResult.UNDERFLOW;
298 b2 = sa[sp + inputSize++] & 0xff;
299 c = dec0208.decodeDouble(b1,b2);
300 if (c == UNMAPPABLE_DECODING)
301 return CoderResult.unmappableForLength(inputSize);
302 da[dp++] = c;
303 break;
304 case JISX0212_1990:
305 if (sp + inputSize + 1 > sl)
306 return CoderResult.UNDERFLOW;
307 b2 = sa[sp + inputSize++] & 0xff;
308 c = dec0212.decodeDouble(b1,b2);
309 if (c == UNMAPPABLE_DECODING)
310 return CoderResult.unmappableForLength(inputSize);
311 da[dp++] = c;
312 break;
313 case JISX0201_1976_KANA:
314 case SHIFTOUT:
315 if (b1 > 0x5f) {
316 return CoderResult.malformedForLength(inputSize);
317 }
318 da[dp++] = (char)(b1 + 0xff40);
319 break;
320 }
321 sp += inputSize;
322 }
323 return CoderResult.UNDERFLOW;
324 } finally {
325 src.position(sp - src.arrayOffset());
326 dst.position(dp - dst.arrayOffset());
327 }
328 }
329
330 private CoderResult decodeBufferLoop(ByteBuffer src,
331 CharBuffer dst)
332 {
333 int mark = src.position();
334 int b1 = 0, b2 = 0, b3 = 0, b4=0;
335 char c = UNMAPPABLE_DECODING;
416 return CoderResult.UNDERFLOW;
417 b2 = src.get() & 0xff;
418 inputSize++;
419 c = dec0208.decodeDouble(b1,b2);
420 if (c == UNMAPPABLE_DECODING)
421 return CoderResult.unmappableForLength(inputSize);
422 dst.put(c);
423 break;
424 case JISX0212_1990:
425 if (!src.hasRemaining())
426 return CoderResult.UNDERFLOW;
427 b2 = src.get() & 0xff;
428 inputSize++;
429 c = dec0212.decodeDouble(b1,b2);
430 if (c == UNMAPPABLE_DECODING)
431 return CoderResult.unmappableForLength(inputSize);
432 dst.put(c);
433 break;
434 case JISX0201_1976_KANA:
435 case SHIFTOUT:
436 if (b1 > 0x5f) {
437 return CoderResult.malformedForLength(inputSize);
438 }
439 dst.put((char)(b1 + 0xff40));
440 break;
441 }
442 mark += inputSize;
443 }
444 return CoderResult.UNDERFLOW;
445 } finally {
446 src.position(mark);
447 }
448 }
449
450 // Make some protected methods public for use by JISAutoDetect
451 public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
452 if (src.hasArray() && dst.hasArray())
453 return decodeArrayLoop(src, dst);
454 else
455 return decodeBufferLoop(src, dst);
456 }
|