blob: ea4b14486017f684f72138e1f5942bf8c3c7b55f [file] [log] [blame]
Finn Williams510f6182020-02-21 11:14:08 +00001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Finn Williams510f6182020-02-21 11:14:08 +00003// SPDX-License-Identifier: MIT
4//
5#pragma once
6
Jim Flynnbbfe6032020-07-20 16:57:44 +01007#include "ITimelineDecoder.hpp"
Finn Williams0c8cb992020-05-07 10:38:15 +01008
Finn Williams510f6182020-02-21 11:14:08 +00009#include <vector>
Finn Williams8a2b4682020-02-26 10:25:26 +000010
Jim Flynnbbfe6032020-07-20 16:57:44 +010011namespace arm
Finn Williams510f6182020-02-21 11:14:08 +000012{
Jim Flynnbbfe6032020-07-20 16:57:44 +010013
14namespace pipe
Finn Williams8a2b4682020-02-26 10:25:26 +000015{
Jim Flynnbbfe6032020-07-20 16:57:44 +010016
Finn Williams510f6182020-02-21 11:14:08 +000017class TimelineDecoder : public ITimelineDecoder
18{
19
20public:
21
22 struct Model
23 {
24 std::vector<Entity> m_Entities;
25 std::vector<EventClass> m_EventClasses;
26 std::vector<Event> m_Events;
27 std::vector<Label> m_Labels;
28 std::vector<Relationship> m_Relationships;
29 };
30
31 using OnNewEntityCallback = void (*)(Model &, const Entity);
32 using OnNewEventClassCallback = void (*)(Model &, const EventClass);
33 using OnNewEventCallback = void (*)(Model &, const Event);
34 using OnNewLabelCallback = void (*)(Model &, const Label);
35 using OnNewRelationshipCallback = void (*)(Model &, const Relationship);
36
Keith Davis97da5e22020-03-05 16:25:28 +000037 virtual TimelineStatus CreateEntity(const Entity &) override;
38 virtual TimelineStatus CreateEventClass(const EventClass &) override;
39 virtual TimelineStatus CreateEvent(const Event &) override;
40 virtual TimelineStatus CreateLabel(const Label &) override;
41 virtual TimelineStatus CreateRelationship(const Relationship &) override;
Finn Williams510f6182020-02-21 11:14:08 +000042
43 const Model& GetModel();
44
Keith Davis97da5e22020-03-05 16:25:28 +000045 TimelineStatus SetEntityCallback(const OnNewEntityCallback);
46 TimelineStatus SetEventClassCallback(const OnNewEventClassCallback);
47 TimelineStatus SetEventCallback(const OnNewEventCallback);
48 TimelineStatus SetLabelCallback(const OnNewLabelCallback);
49 TimelineStatus SetRelationshipCallback(const OnNewRelationshipCallback);
Finn Williams510f6182020-02-21 11:14:08 +000050
Finn Williamse6a2ccd2020-02-27 16:21:41 +000051 void SetDefaultCallbacks();
52
Finn Williams510f6182020-02-21 11:14:08 +000053 void print();
54
55private:
56 Model m_Model;
57
58 OnNewEntityCallback m_OnNewEntityCallback;
59 OnNewEventClassCallback m_OnNewEventClassCallback;
60 OnNewEventCallback m_OnNewEventCallback;
61 OnNewLabelCallback m_OnNewLabelCallback;
62 OnNewRelationshipCallback m_OnNewRelationshipCallback;
63
64 void printLabels();
65 void printEntities();
66 void printEventClasses();
67 void printRelationships();
68 void printEvents();
69};
Finn Williams8a2b4682020-02-26 10:25:26 +000070
Jim Flynnbbfe6032020-07-20 16:57:44 +010071} // namespace pipe
72} // namespace arm