summaryrefslogtreecommitdiff
path: root/ufo/ufo-graph.h
blob: 5ecf32e97c23d93dcd647754936c51e02149adb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
/*
 * Copyright (C) 2011-2013 Karlsruhe Institute of Technology
 *
 * This file is part of Ufo.
 *
 * This library is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation, either
 * version 3 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __UFO_GRAPH_H
#define __UFO_GRAPH_H

#if !defined (__UFO_H_INSIDE__) && !defined (UFO_COMPILATION)
#error "Only <ufo/ufo.h> can be included directly."
#endif

#include <ufo/ufo-node.h>

G_BEGIN_DECLS

#define UFO_TYPE_GRAPH             (ufo_graph_get_type())
#define UFO_GRAPH(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), UFO_TYPE_GRAPH, UfoGraph))
#define UFO_IS_GRAPH(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), UFO_TYPE_GRAPH))
#define UFO_GRAPH_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), UFO_TYPE_GRAPH, UfoGraphClass))
#define UFO_IS_GRAPH_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), UFO_TYPE_GRAPH))
#define UFO_GRAPH_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), UFO_TYPE_GRAPH, UfoGraphClass))

typedef struct _UfoGraph           UfoGraph;
typedef struct _UfoGraphClass      UfoGraphClass;
typedef struct _UfoGraphPrivate    UfoGraphPrivate;
typedef struct _UfoEdge            UfoEdge;

typedef gboolean (*UfoFilterPredicate) (UfoNode *node, gpointer user_data);

/**
 * UfoEdge:
 * @source: source node
 * @target: target node
 * @label: label
 *
 * An edge in a #UfoGraph.
 */
struct _UfoEdge {
    UfoNode     *source;
    UfoNode     *target;
    gpointer     label;
};

/**
 * UfoGraph:
 *
 * Main object for organizing filters. The contents of the #UfoGraph structure
 * are private and should only be accessed via the provided API.
 */
struct _UfoGraph {
    /*< private >*/
    GObject parent_instance;

    UfoGraphPrivate *priv;
};

/**
 * UfoGraphClass:
 *
 * #UfoGraph class
 */
struct _UfoGraphClass {
    /*< private >*/
    GObjectClass parent_class;
};

UfoGraph   *ufo_graph_new                   (void);
void        ufo_graph_connect_nodes         (UfoGraph       *graph,
                                             UfoNode        *source,
                                             UfoNode        *target,
                                             gpointer        label);
gboolean    ufo_graph_is_connected          (UfoGraph       *graph,
                                             UfoNode        *from,
                                             UfoNode        *to);
void        ufo_graph_remove_edge           (UfoGraph       *graph,
                                             UfoNode        *source,
                                             UfoNode        *target);
gpointer    ufo_graph_get_edge_label        (UfoGraph       *graph,
                                             UfoNode        *source,
                                             UfoNode        *target);
guint       ufo_graph_get_num_nodes         (UfoGraph       *graph);
GList      *ufo_graph_get_nodes             (UfoGraph       *graph);
GList      *ufo_graph_get_nodes_filtered    (UfoGraph       *graph,
                                             UfoFilterPredicate func,
                                             gpointer        user_data);
guint       ufo_graph_get_num_edges         (UfoGraph       *graph);
GList      *ufo_graph_get_edges             (UfoGraph       *graph);
GList      *ufo_graph_get_roots             (UfoGraph       *graph);
GList      *ufo_graph_get_leaves            (UfoGraph       *graph);
GList      *ufo_graph_get_predecessors      (UfoGraph       *graph,
                                             UfoNode        *node);
GList      *ufo_graph_get_successors        (UfoGraph       *graph,
                                             UfoNode        *node);
GList      *ufo_graph_get_paths             (UfoGraph       *graph,
                                             UfoFilterPredicate pred);
void        ufo_graph_expand                (UfoGraph       *graph,
                                             GList          *path);
UfoGraph   *ufo_graph_copy                  (UfoGraph       *graph,
                                             GError        **error);
void        ufo_graph_dump_dot              (UfoGraph       *graph,
                                             const gchar    *filename);
GType       ufo_graph_get_type              (void);

G_END_DECLS

#endif