root/src/kits/debugger/dwarf/AttributeValue.cpp
/*
 * Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */

#include "AttributeValue.h"

#include <stdio.h>

#include "AttributeClasses.h"


const char*
AttributeValue::ToString(char* buffer, size_t size)
{
        switch (attributeClass) {
                case ATTRIBUTE_CLASS_ADDRESS:
                        snprintf(buffer, size, "%#" B_PRIx64, address);
                        return buffer;
                case ATTRIBUTE_CLASS_BLOCK:
                        snprintf(buffer, size, "(%p, %#" B_PRIx64 ")", block.data,
                                block.length);
                        return buffer;
                case ATTRIBUTE_CLASS_CONSTANT:
                        snprintf(buffer, size, "%#" B_PRIx64, constant);
                        return buffer;
                case ATTRIBUTE_CLASS_FLAG:
                        snprintf(buffer, size, "%s", flag ? "true" : "false");
                        return buffer;
                case ATTRIBUTE_CLASS_ADDRPTR:
                case ATTRIBUTE_CLASS_LINEPTR:
                case ATTRIBUTE_CLASS_LOCLIST:
                case ATTRIBUTE_CLASS_LOCLISTPTR:
                case ATTRIBUTE_CLASS_MACPTR:
                case ATTRIBUTE_CLASS_RANGELIST:
                case ATTRIBUTE_CLASS_RANGELISTPTR:
                case ATTRIBUTE_CLASS_STROFFSETSPTR:
                        snprintf(buffer, size, "%#" B_PRIx64, pointer);
                        return buffer;
                case ATTRIBUTE_CLASS_REFERENCE:
                        snprintf(buffer, size, "%p", reference);
                        return buffer;
                case ATTRIBUTE_CLASS_STRING:
                        snprintf(buffer, size, "\"%s\"", string);
                        return buffer;

                default:
                case ATTRIBUTE_CLASS_UNKNOWN:
                        return "<unknown>";
        }

        return buffer;
}