/******************************************************************************* | |
* Copyright (c) 2010 Nokia 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: | |
* Nokia - Initial API and implementation | |
*******************************************************************************/ | |
#ifndef TCFCONTEXT_H_ | |
#define TCFCONTEXT_H_ | |
#include <map> | |
#include <vector> | |
#include <list> | |
#include <string> | |
#include "AgentException.h" | |
#include "PropertyValue.h" | |
#define ROOT_CONTEXT_ID "root" | |
/* | |
* Properties of context. | |
*/ | |
/* From: TCF IRunControl.java. | |
*/ | |
#define PROP_ID "ID" | |
#define PROP_PARENT_ID "ParentID" | |
#define PROP_PROCESS_ID "ProcessID" | |
#define PROP_IS_CONTAINER "IsContainer" | |
#define PROP_HAS_STATE "HasState" | |
#define PROP_CAN_RESUME "CanResume" // value: int/long | |
#define PROP_CAN_COUNT "CanCount" | |
#define PROP_CAN_SUSPEND "CanSuspend" | |
#define PROP_CAN_TERMINATE "CanTerminate" | |
/* From: TCF IProcesses.java | |
*/ | |
/** Is the context attached */ | |
#define PROP_ATTACHED "Attached" | |
/** Process name. Client UI can show this name to a user */ | |
#define PROP_NAME "Name" | |
typedef unsigned long ContextOSID; // ID in the OS | |
typedef std::string ContextID; // ID in debugger | |
typedef unsigned long ContextAddress; /* Type to represent byted address inside context memory */ | |
/* | |
* Context in TCF agent. | |
* The context can be a process, thread, register group, register, etc. | |
*/ | |
class Context { | |
public: | |
Context(const ContextID& parentID, const ContextID& internalID); | |
Context(const ContextID& parentID, const ContextID& internalID, Properties& props); | |
virtual ~Context(); | |
/* | |
* Get unique ID for the instance. This is internal ID, not process ID | |
* or thread ID in the OS. | |
*/ | |
ContextID GetID() const; | |
/* Get internal ID of the process if the context is a thread. | |
* Return invalid id if the context is a process. | |
*/ | |
ContextID GetParentID() const; | |
virtual std::list<Context*>& GetChildren(); | |
void AddChild(Context *); | |
void RemoveChild(Context *); | |
Properties& GetProperties(); | |
PropertyValue& GetProperty(const std::string& key); | |
void SetProperty(const std::string& key, const PropertyValue& value); | |
private: | |
void Initialize(); | |
ContextID internalID; | |
ContextID parentID; | |
std::list<Context *> children_; | |
Properties properties; | |
}; | |
typedef void ContextAttachCallBack(int, Context *, void *); | |
#endif /* CONTEXT_H_ */ |