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


#include <string.h>

#include <new>

#include "CfaRuleSet.h"


CfaRuleSet::CfaRuleSet()
        :
        fRegisterRules(NULL),
        fRegisterCount(0)
{
}


CfaRuleSet::~CfaRuleSet()
{
        delete[] fRegisterRules;
}


status_t
CfaRuleSet::Init(uint32 registerCount)
{
        fRegisterRules = new(std::nothrow) CfaRule[registerCount];
        if (fRegisterRules == NULL)
                return B_NO_MEMORY;

        fRegisterCount = registerCount;

        return B_OK;
}


CfaRuleSet*
CfaRuleSet::Clone() const
{
        CfaRuleSet* other = new(std::nothrow) CfaRuleSet;
        if (other == NULL)
                return NULL;

        if (other->Init(fRegisterCount) != B_OK) {
                delete other;
                return NULL;
        }

        other->fCfaCfaRule = fCfaCfaRule;
        memcpy(other->fRegisterRules, fRegisterRules,
                sizeof(CfaRule) * fRegisterCount);

        return other;
}


CfaRule*
CfaRuleSet::RegisterRule(uint32 index) const
{
        return index < fRegisterCount ? fRegisterRules + index : NULL;
}