WOPM (Watch Object Pool Module)

From OO Lab
Revision as of 14:04, 30 January 2012 by RyanYang (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

GRADE F: Please follow the template and WHO ARE you ?


edited by neo0093

Back


Introduction

wop是DIVA儲存被視覺化變數的資料結構,當使用者在Mapping dialog裡將變數與VM的屬性作一個連結時,此時DIVA會產生一個WOP,WOP會隨時觀察變數的變化,當變數隨著程式的執行而 產生變化時,VM的屬性會隨著WOP不斷的更新而有所改變。

UML.png

Definition

WOP(Watch Object Pool)

WOP是一個table儲存被visualize的變數資訊,包含變數名稱、變數內容、物件位置(hash code)及變數種類等。每個WOP變數都是當作一個table的entry儲存,基底的class為

WOP_Entry,由不同type的wop_entry類別繼承。

WOP_TYPE

依據被觀察的變數種類而有不同的wop_entry類別primitive (int,double,float,string,bool,char)、refernce (ref,Array_ref)、heap(obj、array)。

primitive type: 主要紀錄該變數種類的value,ex:WOP_INT_ENTRY就用一個int來紀錄該變數的值。

referece type: 主要紀錄該reference變數的address,ex:A@ac00845(hash code),被指到的物件若沒被執行unfold(derefernce)的指令則不會被加入WOP。

heap type : 簡單的比較一下Ref跟Heap,Ref相當於pointer,而Heap相當於該物件在記憶體中的實體通常,實體中會再包含一些子元素,此外,Heap Entry必定是經由unfold一個

Ref_Entry而出現的。obj跟array都是繼承WOP_HEAP_ENTRY,兩者相似度極高,主要差異在obj儲存的變數種類不唯一而array儲存的是單一類別。

WOPM(Watch Object Pool Module)

wop_type_entry 是組成wop的最基本資料結構,此模組有一個vector儲存所有的wop物件,主要的operation如下:

void WOPM::addEntry(WOP_Entry *entry) 將wop_entry加入vector

void WOPM::removeEntry(WOP_Entry *entry) 將wop_entry從vector中移除

WOP_Entry* WOPM::searchEntrybyName(string name, string type) 用變數的名稱及type找出對應的wop_entry

WOP_Entry* WOPM::check_existing_objects(std::string _value) 檢查某變數是否已有對應的wop_entry

void WOPM::updateAll() 將vector裡所有inscope的wop值做更新

void WOPM::updateDescents(WOP_Entry *refen) 將某refernce type的descent作update

WOP_Entry* WOPM::createEntry(string name,string type, WOP_Entry *parent, WOP_Entry* from, bool top, string vartype, string addr)

依據傳入的參數建立對應type的wop_entry

Purpose of this trace

Scenario

Personal tools