hotspot/src/share/vm/utilities/ostream.cpp
changeset 13476 471200fb94fd
parent 13195 be27e1b6a4b9
child 13964 01a2b863cc61
equal deleted inserted replaced
13475:27f1abd05ae9 13476:471200fb94fd
     1 /*
     1 /*
     2  * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   235   }
   235   }
   236   print_raw(suffix);
   236   print_raw(suffix);
   237   return;
   237   return;
   238 }
   238 }
   239 
   239 
   240 void outputStream::indent() {
   240 outputStream& outputStream::indent() {
   241   while (_position < _indentation) sp();
   241   while (_position < _indentation) sp();
       
   242   return *this;
   242 }
   243 }
   243 
   244 
   244 void outputStream::print_jlong(jlong value) {
   245 void outputStream::print_jlong(jlong value) {
   245   // N.B. Same as INT64_FORMAT
   246   // N.B. Same as INT64_FORMAT
   246   print(os::jlong_format_specifier(), value);
   247   print(os::jlong_format_specifier(), value);
   247 }
   248 }
   248 
   249 
   249 void outputStream::print_julong(julong value) {
   250 void outputStream::print_julong(julong value) {
   250   // N.B. Same as UINT64_FORMAT
   251   // N.B. Same as UINT64_FORMAT
   251   print(os::julong_format_specifier(), value);
   252   print(os::julong_format_specifier(), value);
       
   253 }
       
   254 
       
   255 /**
       
   256  * This prints out hex data in a 'windbg' or 'xxd' form, where each line is:
       
   257  *   <hex-address>: 8 * <hex-halfword> <ascii translation (optional)>
       
   258  * example:
       
   259  * 0000000: 7f44 4f46 0102 0102 0000 0000 0000 0000  .DOF............
       
   260  * 0000010: 0000 0000 0000 0040 0000 0020 0000 0005  .......@... ....
       
   261  * 0000020: 0000 0000 0000 0040 0000 0000 0000 015d  .......@.......]
       
   262  * ...
       
   263  *
       
   264  * indent is applied to each line.  Ends with a CR.
       
   265  */
       
   266 void outputStream::print_data(void* data, size_t len, bool with_ascii) {
       
   267   size_t limit = (len + 16) / 16 * 16;
       
   268   for (size_t i = 0; i < limit; ++i) {
       
   269     if (i % 16 == 0) {
       
   270       indent().print("%07x:", i);
       
   271     }
       
   272     if (i % 2 == 0) {
       
   273       print(" ");
       
   274     }
       
   275     if (i < len) {
       
   276       print("%02x", ((unsigned char*)data)[i]);
       
   277     } else {
       
   278       print("  ");
       
   279     }
       
   280     if ((i + 1) % 16 == 0) {
       
   281       if (with_ascii) {
       
   282         print("  ");
       
   283         for (size_t j = 0; j < 16; ++j) {
       
   284           size_t idx = i + j - 15;
       
   285           if (idx < len) {
       
   286             char c = ((char*)data)[idx];
       
   287             print("%c", c >= 32 && c <= 126 ? c : '.');
       
   288           }
       
   289         }
       
   290       }
       
   291       print_cr("");
       
   292     }
       
   293   }
   252 }
   294 }
   253 
   295 
   254 stringStream::stringStream(size_t initial_size) : outputStream() {
   296 stringStream::stringStream(size_t initial_size) : outputStream() {
   255   buffer_length = initial_size;
   297   buffer_length = initial_size;
   256   buffer        = NEW_RESOURCE_ARRAY(char, buffer_length);
   298   buffer        = NEW_RESOURCE_ARRAY(char, buffer_length);