blob: 7840b8097a8d4af14be000668e9b3513586ea9ef [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
#include "StdAfx.h"
#include "CrossfireLineBreakpoint.h"
/* initialize statics */
const wchar_t* CrossfireLineBreakpoint::BPTYPESTRING_LINE = L"line";
const wchar_t* CrossfireLineBreakpoint::KEY_LINE = L"line";
const wchar_t* CrossfireLineBreakpoint::KEY_URL = L"url";
CrossfireLineBreakpoint::CrossfireLineBreakpoint() : CrossfireBreakpoint() {
m_line = -1;
m_url = NULL;
}
CrossfireLineBreakpoint::CrossfireLineBreakpoint(unsigned int handle) : CrossfireBreakpoint(handle) {
m_line = -1;
m_url = NULL;
}
CrossfireLineBreakpoint::~CrossfireLineBreakpoint() {
if (m_url) {
delete m_url;
}
}
bool CrossfireLineBreakpoint::CanHandleBPType(wchar_t* type) {
return wcscmp(type, BPTYPESTRING_LINE) == 0;
}
bool CrossfireLineBreakpoint::appliesToUrl(std::wstring* url) {
return m_url->compare(*url) == 0;
}
void CrossfireLineBreakpoint::clone(CrossfireBreakpoint** _value) {
CrossfireLineBreakpoint* result = new CrossfireLineBreakpoint(getHandle());
result->setCondition((std::wstring*)getCondition());
result->setContextId((std::wstring*)getContextId());
result->setEnabled(isEnabled());
result->setLine(getLine());
result->setUrl((std::wstring*)getUrl());
*_value = result;
}
unsigned int CrossfireLineBreakpoint::getLine() {
return m_line;
}
bool CrossfireLineBreakpoint::getLocationAsValue(Value** _value) {
if (!m_url || m_line < 0) {
return false;
}
Value* result = new Value();
result->setObjectValue(KEY_URL, &Value(m_url));
result->setObjectValue(KEY_LINE, &Value((double)m_line));
*_value = result;
return true;
}
int CrossfireLineBreakpoint::getType() {
return BPTYPE_LINE;
}
const wchar_t* CrossfireLineBreakpoint::getTypeString() {
return BPTYPESTRING_LINE;
}
const std::wstring* CrossfireLineBreakpoint::getUrl() {
return m_url;
}
void CrossfireLineBreakpoint::setLine(unsigned int value) {
m_line = value;
}
bool CrossfireLineBreakpoint::setLocationFromValue(Value* value) {
Value* value_url = value->getObjectValue(KEY_URL);
if (!value_url || value_url->getType() != TYPE_STRING) {
Logger::error("breakpoint 'location' argument does not have a valid 'url' value");
return false;
}
Value* value_line = value->getObjectValue(KEY_LINE);
if (!value_line || value_line->getType() != TYPE_NUMBER) {
Logger::error("breakpoint 'location' argument does not have a valid 'line' value");
return false;
}
setLine((unsigned int)value_line->getNumberValue());
setUrl(value_url->getStringValue());
return true;
}
bool CrossfireLineBreakpoint::setUrl(std::wstring* value) {
if (!value) {
return false;
}
if (!m_url) {
m_url = new std::wstring;
}
m_url->assign(*value);
return true;
}