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