[haiku-commits] r33905 - haiku/trunk/src/apps/debugger/util

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 5 Nov 2009 18:39:09 +0100 (CET)

Author: bonefish
Date: 2009-11-05 18:39:09 +0100 (Thu, 05 Nov 2009)
New Revision: 33905
Changeset: http://dev.haiku-os.org/changeset/33905/haiku

Added:
   haiku/trunk/src/apps/debugger/util/IntegerFormatter.cpp
   haiku/trunk/src/apps/debugger/util/IntegerFormatter.h
Log:
Utility class to format integer values.


Added: haiku/trunk/src/apps/debugger/util/IntegerFormatter.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/util/IntegerFormatter.cpp                     
        (rev 0)
+++ haiku/trunk/src/apps/debugger/util/IntegerFormatter.cpp     2009-11-05 
17:39:09 UTC (rev 33905)
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
+ * Distributed under the terms of the MIT License.
+ */
+
+
+#include "IntegerFormatter.h"
+
+#include <stdio.h>
+
+#include <TypeConstants.h>
+
+
+/*static*/ bool
+IntegerFormatter::FormatValue(const BVariant& value, integer_format format,
+       char* buffer, size_t bufferSize)
+{
+       bool isSigned;
+       if (!value.IsInteger(&isSigned))
+               return false;
+
+       if (format == INTEGER_FORMAT_DEFAULT)
+               format = isSigned ? INTEGER_FORMAT_SIGNED : 
INTEGER_FORMAT_UNSIGNED;
+
+       if (format == INTEGER_FORMAT_HEX_DEFAULT) {
+               switch (value.Type()) {
+                       case B_INT8_TYPE:
+                       case B_UINT8_TYPE:
+                               format = INTEGER_FORMAT_HEX_8;
+                               break;
+                       case B_INT16_TYPE:
+                       case B_UINT16_TYPE:
+                               format = INTEGER_FORMAT_HEX_16;
+                               break;
+                       case B_INT32_TYPE:
+                       case B_UINT32_TYPE:
+                               format = INTEGER_FORMAT_HEX_32;
+                               break;
+                       case B_INT64_TYPE:
+                       case B_UINT64_TYPE:
+                       default:
+                               format = INTEGER_FORMAT_HEX_64;
+                               break;
+               }
+       }
+
+       // format the value
+       switch (format) {
+               case INTEGER_FORMAT_SIGNED:
+                       snprintf(buffer, bufferSize, "%lld", value.ToInt64());
+                       break;
+               case INTEGER_FORMAT_UNSIGNED:
+                       snprintf(buffer, bufferSize, "%llu", value.ToUInt64());
+                       break;
+               case INTEGER_FORMAT_HEX_8:
+                       snprintf(buffer, bufferSize, "%#x", 
(uint8)value.ToUInt64());
+                       break;
+               case INTEGER_FORMAT_HEX_16:
+                       snprintf(buffer, bufferSize, "%#x", 
(uint16)value.ToUInt64());
+                       break;
+               case INTEGER_FORMAT_HEX_32:
+                       snprintf(buffer, bufferSize, "%#lx", 
(uint32)value.ToUInt64());
+                       break;
+               case INTEGER_FORMAT_HEX_64:
+               case INTEGER_FORMAT_HEX_DEFAULT:
+               default:
+                       snprintf(buffer, bufferSize, "%#llx", value.ToUInt64());
+                       break;
+       }
+
+       return true;
+}

Added: haiku/trunk/src/apps/debugger/util/IntegerFormatter.h
===================================================================
--- haiku/trunk/src/apps/debugger/util/IntegerFormatter.h                       
        (rev 0)
+++ haiku/trunk/src/apps/debugger/util/IntegerFormatter.h       2009-11-05 
17:39:09 UTC (rev 33905)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef INTEGER_FORMATTER_H
+#define INTEGER_FORMATTER_H
+
+
+#include <Variant.h>
+
+
+enum integer_format {
+       INTEGER_FORMAT_DEFAULT          = 0,
+       INTEGER_FORMAT_SIGNED           = 1,
+       INTEGER_FORMAT_UNSIGNED         = 2,
+       INTEGER_FORMAT_HEX_DEFAULT      = 3,
+       INTEGER_FORMAT_HEX_8            = 8,
+       INTEGER_FORMAT_HEX_16           = 16,
+       INTEGER_FORMAT_HEX_32           = 32,
+       INTEGER_FORMAT_HEX_64           = 64
+};
+
+
+class IntegerFormatter {
+public:
+       static  bool                            FormatValue(const BVariant& 
value,
+                                                                       
integer_format format, char* buffer,
+                                                                       size_t 
bufferSize);
+};
+
+
+#endif // INTEGER_FORMATTER_H


Other related posts:

  • » [haiku-commits] r33905 - haiku/trunk/src/apps/debugger/util - ingo_weinhold