X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fgraph%2Fcomponent-class-source-const.h;h=f3c87ff6a60235c1d266b6583fcdc9a6e2bdb065;hb=0cbc2c3316814e4b4bf3fd3ba3b361b165949e95;hp=6491239c6eb34b27dfd8e7c7e23ef41c649c9231;hpb=0d72b8c329ad51d14ab4e83330b38c2c8da69dd4;p=babeltrace.git diff --git a/include/babeltrace/graph/component-class-source-const.h b/include/babeltrace/graph/component-class-source-const.h index 6491239c..f3c87ff6 100644 --- a/include/babeltrace/graph/component-class-source-const.h +++ b/include/babeltrace/graph/component-class-source-const.h @@ -2,6 +2,7 @@ #define BABELTRACE_GRAPH_COMPONENT_CLASS_SOURCE_CONST_H /* + * Copyright 2017-2018 Philippe Proulx * Copyright 2016 Jérémie Galarneau * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -23,21 +24,43 @@ * SOFTWARE. */ +/* + * For bt_component_class, bt_component_class_source, + * __BT_UPCAST_CONST + */ +#include + #ifdef __cplusplus extern "C" { #endif -struct bt_component_class; -struct bt_component_class_source; - static inline -const struct bt_component_class * +const bt_component_class * bt_component_class_source_as_component_class_const( - const struct bt_component_class_source *comp_cls_source) + const bt_component_class_source *comp_cls_source) { - return (const void *) comp_cls_source; + return __BT_UPCAST_CONST(bt_component_class, comp_cls_source); } +extern void bt_component_class_source_get_ref( + const bt_component_class_source *component_class_source); + +extern void bt_component_class_source_put_ref( + const bt_component_class_source *component_class_source); + +#define BT_COMPONENT_CLASS_SOURCE_PUT_REF_AND_RESET(_var) \ + do { \ + bt_component_class_source_put_ref(_var); \ + (_var) = NULL; \ + } while (0) + +#define BT_COMPONENT_CLASS_SOURCE_MOVE_REF(_var_dst, _var_src) \ + do { \ + bt_component_class_source_put_ref(_var_dst); \ + (_var_dst) = (_var_src); \ + (_var_src) = NULL; \ + } while (0) + #ifdef __cplusplus } #endif