Goose  Diff

Differences From Artifact [a390b068c6]:

  • File bs/util/graphviz.h — part of check-in [af650a9e95] at 2019-09-22 14:37:55 on branch trunk — Project renaming. (user: achavasse size: 3740)

To Artifact [9f66175c66]:

  • File bs/util/graphviz.h — part of check-in [0db147f117] at 2024-09-15 20:24:31 on branch cir-ssa-refactor — Add clang format settings, reformat everything (user: achavasse size: 3220)

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
        extern const char* base09;
        extern const char* base0A;
        extern const char* base0B;
        extern const char* base0C;
        extern const char* base0D;
        extern const char* base0E;
        extern const char* base0F;
    }

    // Helper class to dump data structures into a graphiz dot file.
    class GraphVizBuilder
    {
        public:
            GraphVizBuilder( ostream& output, bool vertical = false );
            ~GraphVizBuilder();

            ostream& indent() const;
            ostream& newLine() const;

            ostream& output() const { return m_output; }

            static const char* BGColor;
            static const char* TextColor;

            static const char* GetNodeColor( uint32_t id );
            uint32_t getNodeId( const void* pNodeAddress );

            uint32_t currentNodeId() const { return m_currentNode; }

            bool wasNodeGenerated( const void* pNodeAddress ) const;

            template< typename F > void queueWork( F&& func )
            {
                m_workQueue.push( forward< F >( func ) );
            }

            void addEdge( uint32_t fromId, uint32_t toId );

            class Indention
            {
                public:
                    Indention( GraphVizBuilder& builder );
                    ~Indention();

                private:
                    GraphVizBuilder& m_builder;
            };

            class Table
            {
                public:
                    Table( GraphVizBuilder& builder, const char* pColor = TextColor );
                    ~Table();

                private:
                    GraphVizBuilder& m_builder;
            };

            class Row
            {
                public:
                    Row( GraphVizBuilder& builder );
                    ~Row();

                private:
                    GraphVizBuilder& m_builder;
            };

            class Cell
            {
                public:
                    Cell( GraphVizBuilder& builder );
                    ~Cell();

                private:
                    GraphVizBuilder& m_builder;
            };

            class Color
            {
                public:
                    Color( GraphVizBuilder& builder, const char* pColor = TextColor );
                    ~Color();

                private:
                    GraphVizBuilder& m_builder;
            };

            class Node
            {
                public:
                    Node( GraphVizBuilder& builder, const void* pAddress, const char* pTitle = nullptr );
                    ~Node();

                private:
                    GraphVizBuilder& m_builder;
            };

        private:
            ostream&                                m_output;
            unordered_map< const void*, uint32_t >  m_nodesDict;
            unordered_set< const void* >            m_generatedNodes;
            queue< function< void() > >             m_workQueue;

            uint32_t                                m_indention = 1;
            uint32_t                                m_nodeCount = 0;
            uint32_t                                m_currentNode = 0;
            uint32_t                                m_portCount = 0;
    };
}

#endif







|




|
|
|

|
|
>
|

|
|

|
|
>
|

|

|
|
|
|

|

|
|
|
|
|

|
|
|

|
|
|
|
|

|
|
|

|
|
|
|
|

|
|
|

|
|
|
|
|

|
|
|

|
|
|
|
|

|
|
|

|
|
|
|
|

|
|
|

|
|
|
|
|

|
|
|
|

|


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
        extern const char* base09;
        extern const char* base0A;
        extern const char* base0B;
        extern const char* base0C;
        extern const char* base0D;
        extern const char* base0E;
        extern const char* base0F;
    } // namespace colors

    // Helper class to dump data structures into a graphiz dot file.
    class GraphVizBuilder
    {
      public:
        GraphVizBuilder( ostream& output, bool vertical = false );
        ~GraphVizBuilder();

        ostream& indent() const;
        ostream& newLine() const;

        ostream& output() const { return m_output; }

        static const char* BGColor;
        static const char* TextColor;

        static const char* GetNodeColor( uint32_t id );
        uint32_t getNodeId( const void* pNodeAddress );

        uint32_t currentNodeId() const { return m_currentNode; }

        bool wasNodeGenerated( const void* pNodeAddress ) const;

        template< typename F > void queueWork( F&& func )
        {
            m_workQueue.push( forward< F >( func ) );
        }

        void addEdge( uint32_t fromId, uint32_t toId );

        class Indention
        {
          public:
            Indention( GraphVizBuilder& builder );
            ~Indention();

          private:
            GraphVizBuilder& m_builder;
        };

        class Table
        {
          public:
            Table( GraphVizBuilder& builder, const char* pColor = TextColor );
            ~Table();

          private:
            GraphVizBuilder& m_builder;
        };

        class Row
        {
          public:
            Row( GraphVizBuilder& builder );
            ~Row();

          private:
            GraphVizBuilder& m_builder;
        };

        class Cell
        {
          public:
            Cell( GraphVizBuilder& builder );
            ~Cell();

          private:
            GraphVizBuilder& m_builder;
        };

        class Color
        {
          public:
            Color( GraphVizBuilder& builder, const char* pColor = TextColor );
            ~Color();

          private:
            GraphVizBuilder& m_builder;
        };

        class Node
        {
          public:
            Node( GraphVizBuilder& builder, const void* pAddress, const char* pTitle = nullptr );
            ~Node();

          private:
            GraphVizBuilder& m_builder;
        };

      private:
        ostream& m_output;
        unordered_map< const void*, uint32_t > m_nodesDict;
        unordered_set< const void* > m_generatedNodes;
        queue< function< void() > > m_workQueue;

        uint32_t m_indention = 1;
        uint32_t m_nodeCount = 0;
        uint32_t m_currentNode = 0;
        uint32_t m_portCount = 0;
    };
} // namespace goose::util

#endif