Commit ed0162ad authored by ozantonkal's avatar ozantonkal Committed by Ozan Tonkal

remove reference counting in widgets

parent 08917908
......@@ -14,9 +14,6 @@ namespace cv
{
public:
Widget();
Widget(const Widget &other);
Widget& operator =(const Widget &other);
~Widget();
static Widget fromPlyFile(const String &file_name);
......@@ -28,9 +25,6 @@ namespace cv
class Impl;
Impl *impl_;
friend struct WidgetAccessor;
void create();
void release();
};
/////////////////////////////////////////////////////////////////////////////
......
......@@ -7,52 +7,11 @@ class cv::viz::Widget::Impl
{
public:
vtkSmartPointer<vtkProp> prop;
int ref_counter;
Impl() : prop(0) {}
};
cv::viz::Widget::Widget() : impl_(0)
{
create();
}
cv::viz::Widget::Widget(const Widget &other) : impl_(other.impl_)
{
if (impl_) CV_XADD(&impl_->ref_counter, 1);
}
cv::viz::Widget& cv::viz::Widget::operator=(const Widget &other)
{
if (this != &other)
{
release();
impl_ = other.impl_;
if (impl_) CV_XADD(&impl_->ref_counter, 1);
}
return *this;
}
cv::viz::Widget::~Widget()
{
release();
}
void cv::viz::Widget::create()
{
if (impl_) release();
impl_ = new Impl();
impl_->ref_counter = 1;
}
void cv::viz::Widget::release()
{
if (impl_ && CV_XADD(&impl_->ref_counter, -1) == 1)
{
delete impl_;
impl_ = 0;
}
}
cv::viz::Widget::Widget() : impl_( new Impl() ) { }
cv::viz::Widget cv::viz::Widget::fromPlyFile(const String &file_name)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment