+ gboolean (* has_position) (const GtkCssMatcher *matcher,
+ gboolean forward,
+ int a,
+ int b);
+ gboolean is_any;
+};
+
+struct _GtkCssMatcherWidgetPath {
+ const GtkCssMatcherClass *klass;
+ const GtkWidgetPath *path;
+ GtkStateFlags state_flags;
+ guint index;
+ guint sibling_index;
+};
+
+struct _GtkCssMatcherSuperset {
+ const GtkCssMatcherClass *klass;
+ const GtkCssMatcher *subset;
+ GtkCssChange relevant;
+};
+
+union _GtkCssMatcher {
+ const GtkCssMatcherClass *klass;
+ GtkCssMatcherWidgetPath path;
+ GtkCssMatcherSuperset superset;
+};
+
+gboolean _gtk_css_matcher_init (GtkCssMatcher *matcher,
+ const GtkWidgetPath *path,
+ GtkStateFlags state) G_GNUC_WARN_UNUSED_RESULT;
+void _gtk_css_matcher_any_init (GtkCssMatcher *matcher);
+void _gtk_css_matcher_superset_init (GtkCssMatcher *matcher,
+ const GtkCssMatcher *subset,
+ GtkCssChange relevant);
+
+
+static inline gboolean
+_gtk_css_matcher_get_parent (GtkCssMatcher *matcher,
+ const GtkCssMatcher *child)
+{
+ return child->klass->get_parent (matcher, child);
+}
+
+static inline gboolean
+_gtk_css_matcher_get_previous (GtkCssMatcher *matcher,
+ const GtkCssMatcher *next)
+{
+ return next->klass->get_previous (matcher, next);
+}
+
+static inline GtkStateFlags
+_gtk_css_matcher_get_state (const GtkCssMatcher *matcher)
+{
+ return matcher->klass->get_state (matcher);
+}
+
+static inline gboolean
+_gtk_css_matcher_has_type (const GtkCssMatcher *matcher,
+ GType type)
+{
+ return matcher->klass->has_type (matcher, type);
+}
+
+static inline gboolean
+_gtk_css_matcher_has_class (const GtkCssMatcher *matcher,
+ GQuark class_name)
+{
+ return matcher->klass->has_class (matcher, class_name);
+}
+
+static inline gboolean
+_gtk_css_matcher_has_id (const GtkCssMatcher *matcher,
+ const char *id)
+{
+ return matcher->klass->has_id (matcher, id);
+}
+
+
+static inline gboolean
+_gtk_css_matcher_has_regions (const GtkCssMatcher *matcher)
+{
+ return matcher->klass->has_regions (matcher);
+}
+
+static inline gboolean
+_gtk_css_matcher_has_region (const GtkCssMatcher *matcher,
+ const char *region,
+ GtkRegionFlags flags)
+{
+ return matcher->klass->has_region (matcher, region, flags);
+}
+
+static inline guint
+_gtk_css_matcher_has_position (const GtkCssMatcher *matcher,
+ gboolean forward,
+ int a,
+ int b)
+{
+ return matcher->klass->has_position (matcher, forward, a, b);
+}
+
+static inline gboolean
+_gtk_css_matcher_matches_any (const GtkCssMatcher *matcher)
+{
+ return matcher->klass->is_any;
+}
+