329 }
330
331 public float getFloatAt(int index) {
332 checkIndex(index);
333 requireType('F');
334 return floatAt(index << 2, getValue());
335 }
336
337 public double getDoubleAt(int index) {
338 checkIndex(index);
339 requireType('D');
340 return doubleAt(index << 3, getValue());
341 }
342
343 public String valueString() {
344 return valueString(true);
345 }
346
347 public String valueString(boolean bigLimit) {
348 // Char arrays deserve special treatment
349 StringBuffer result;
350 byte[] value = getValue();
351 int max = value.length;
352 byte elementSignature = getElementType();
353 if (elementSignature == 'C') {
354 result = new StringBuffer();
355 for (int i = 0; i < value.length; ) {
356 char val = charAt(i, value);
357 result.append(val);
358 i += 2;
359 }
360 } else {
361 int limit = 8;
362 if (bigLimit) {
363 limit = 1000;
364 }
365 result = new StringBuffer("{");
366 int num = 0;
367 for (int i = 0; i < value.length; ) {
368 if (num > 0) {
369 result.append(", ");
370 }
371 if (num >= limit) {
372 result.append("... ");
373 break;
374 }
375 num++;
376 switch (elementSignature) {
377 case 'Z': {
378 boolean val = booleanAt(i, value);
379 if (val) {
380 result.append("true");
381 } else {
382 result.append("false");
383 }
384 i++;
385 break;
386 }
387 case 'B': {
388 int val = 0xFF & byteAt(i, value);
389 result.append("0x" + Integer.toString(val, 16));
390 i++;
391 break;
392 }
393 case 'S': {
394 short val = shortAt(i, value);
395 i += 2;
396 result.append("" + val);
397 break;
398 }
399 case 'I': {
400 int val = intAt(i, value);
401 i += 4;
402 result.append("" + val);
403 break;
404 }
405 case 'J': { // long
406 long val = longAt(i, value);
407 result.append("" + val);
408 i += 8;
409 break;
410 }
411 case 'F': {
412 float val = floatAt(i, value);
413 result.append("" + val);
414 i += 4;
415 break;
416 }
417 case 'D': { // double
418 double val = doubleAt(i, value);
419 result.append("" + val);
420 i += 8;
421 break;
422 }
423 default: {
424 throw new RuntimeException("unknown primitive type?");
425 }
426 }
427 }
428 result.append("}");
429 }
430 return result.toString();
431 }
432
433 }
|
329 }
330
331 public float getFloatAt(int index) {
332 checkIndex(index);
333 requireType('F');
334 return floatAt(index << 2, getValue());
335 }
336
337 public double getDoubleAt(int index) {
338 checkIndex(index);
339 requireType('D');
340 return doubleAt(index << 3, getValue());
341 }
342
343 public String valueString() {
344 return valueString(true);
345 }
346
347 public String valueString(boolean bigLimit) {
348 // Char arrays deserve special treatment
349 StringBuilder result;
350 byte[] value = getValue();
351 int max = value.length;
352 byte elementSignature = getElementType();
353 if (elementSignature == 'C') {
354 result = new StringBuilder();
355 for (int i = 0; i < value.length; ) {
356 char val = charAt(i, value);
357 result.append(val);
358 i += 2;
359 }
360 } else {
361 int limit = 8;
362 if (bigLimit) {
363 limit = 1000;
364 }
365 result = new StringBuilder("{");
366 int num = 0;
367 for (int i = 0; i < value.length; ) {
368 if (num > 0) {
369 result.append(", ");
370 }
371 if (num >= limit) {
372 result.append("... ");
373 break;
374 }
375 num++;
376 switch (elementSignature) {
377 case 'Z': {
378 boolean val = booleanAt(i, value);
379 if (val) {
380 result.append("true");
381 } else {
382 result.append("false");
383 }
384 i++;
385 break;
386 }
387 case 'B': {
388 int val = 0xFF & byteAt(i, value);
389 result.append("0x").append(Integer.toString(val, 16));
390 i++;
391 break;
392 }
393 case 'S': {
394 short val = shortAt(i, value);
395 i += 2;
396 result.append(val);
397 break;
398 }
399 case 'I': {
400 int val = intAt(i, value);
401 i += 4;
402 result.append(val);
403 break;
404 }
405 case 'J': { // long
406 long val = longAt(i, value);
407 result.append(val);
408 i += 8;
409 break;
410 }
411 case 'F': {
412 float val = floatAt(i, value);
413 result.append(val);
414 i += 4;
415 break;
416 }
417 case 'D': { // double
418 double val = doubleAt(i, value);
419 result.append(val);
420 i += 8;
421 break;
422 }
423 default: {
424 throw new RuntimeException("unknown primitive type?");
425 }
426 }
427 }
428 result.append('}');
429 }
430 return result.toString();
431 }
432
433 }
|