/*--------------------------------------------------------------------*/ /*--- Callgrind ---*/ /*--- ct_events.h ---*/ /*--- (C) 2004, Josef Weidendorfer ---*/ /*--------------------------------------------------------------------*/ /* Abstractions for 64-bit cost lists (ct_costs.h) */ #ifndef CT_EVENTS #define CT_EVENTS #include "vg_skin.h" /* An event type */ typedef struct _EventType EventType; struct _EventType { char* name; char* description; Int id; }; EventType* SK_(register_eventtype)(char*); EventType* SK_(get_eventtype)(char*); EventType* SK_(get_eventtype_byindex)(Int id); /* An event set is a ordered list of event types, which comes down * to some description for ordered lists of costs. * Often, costs of 2 event types are related, e.g. one is always smaller * than the other. This is useful to speed up arithmetics on cost lists: * Each event type in the set has a . All indexes before are * promised to hold smaller values the the current. */ typedef struct _EventSetEntry EventSetEntry; struct _EventSetEntry { EventType* type; Int nextTop; }; typedef struct _EventSet EventSet; struct _EventSet { Char* name; Int size; Int capacity; EventSetEntry e[0]; }; /* Some events out of an event set. * Used to print out part of an EventSet, or in another order. */ typedef struct _EventMapping EventMapping; struct _EventMapping { EventSet* set; Int size; Int capacity; Int index[0]; }; /* Allocate space for an event set */ EventSet* SK_(get_eventset)(Char* n, Int capacity); /* Incorporate a event type into a set, get start offset */ Int SK_(add_eventtype)(EventSet* dst, EventType*); /* Incorporate two event types into a set, with second < first */ Int SK_(add_dep_event2)(EventSet* dst, EventType* e1, EventType* e2); /* Incorporate 3 event types into a set, with third < second < first */ Int SK_(add_dep_event3)(EventSet* dst, EventType* e1, EventType* e2, EventType* e3); /* Incorporate one event set into another, get start offset */ Int SK_(add_eventset)(EventSet* dst, EventSet* src); /* Returns number of characters written */ Int SK_(sprint_eventset)(Char* buf, EventSet*); /* Allocate cost array for an event set */ ULong* SK_(get_eventset_cost)(EventSet*); /* Operations on costs. A cost pointer of 0 means zero cost. * Functions ending in _lz allocate costs lazy if needed */ /* Set costs according full capacity of event set to 0 */ void SK_(init_cost)(EventSet*,ULong*); /* This always allocates counter and sets them to 0 */ void SK_(init_cost_lz)(EventSet*,ULong**); /* Set costs of an event set to zero */ void SK_(zero_cost)(EventSet*,ULong*); Bool SK_(is_zero_cost)(EventSet*,ULong*); Bool SK_(is_equal_cost)(EventSet*,ULong*,ULong*); void SK_(copy_cost)(EventSet*,ULong* dst, ULong* src); void SK_(copy_cost_lz)(EventSet*,ULong** pdst, ULong* src); void SK_(add_cost)(EventSet*,ULong* dst, ULong* src); void SK_(add_cost_lz)(EventSet*,ULong** pdst, ULong* src); /* Adds src to dst and zeros src. Returns false if nothing changed */ Bool SK_(add_and_zero_cost)(EventSet*,ULong* dst, ULong* src); Bool SK_(add_and_zero_cost_lz)(EventSet*,ULong** pdst, ULong* src); /* Adds difference of new and old to to dst, and set old to new. * Returns false if nothing changed */ Bool SK_(add_diff_cost)(EventSet*,ULong* dst, ULong* old, ULong* new); Bool SK_(add_diff_cost_lz)(EventSet*,ULong** pdst, ULong* old, ULong* new); /* Returns number of characters written */ Int SK_(sprint_cost)(Char* buf, EventSet*, ULong*); /* Allocate space for an event mapping */ EventMapping* SK_(get_eventmapping)(EventSet*); void SK_(append_event)(EventMapping*, char*); /* Returns number of characters written */ Int SK_(sprint_eventmapping)(Char* buf, EventMapping*); /* Returns number of characters written */ Int SK_(sprint_mappingcost)(Char* buf, EventMapping*, ULong*); #endif /* CT_EVENTS */