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