Example #1
0
Variable<T_>::Variable(std::string&& thename, T_ themin, T_ themax, T_ theini) :
	name_(std::move(thename)),
	min_(themin),
	max_(themax),
	ini_(theini),
	range_(1),
	offset_(0)
{
	assert_invariant();
}
Example #2
0
 ref_count_ptr &operator=(const ref_count_ptr &r) {
     if (this==&r) return *this;
     reset();
     ptr=r.ptr;
     dtor=r.dtor;
     k=r.k;
     if (*this) ++*k; // call operator bool() test if k != 0
     assert_invariant();
     return *this;
 }
Example #3
0
    void reset() {
        // If I am empty return
        if (!*this) return;

        if (!--*k) { /* --*k == 0 */
            dtor(ptr); // clean up memory
            delete k;
            k=0;
            ptr=0;
        }
        assert_invariant();
    }
Example #4
0
Variable<T_>&
Variable<T_>::operator=(Variable<T_>&& that)
{
	if (!name_.empty()) {
		std::string err("trying to copy-assign the non-fresh variable \"");
		throw_FigException(err.append(name_).append("\""));
	}
	name_   = std::move(that.name_);
	min_    = std::move(that.min_);
	max_    = std::move(that.max_);
	ini_    = std::move(that.ini_);
	range_  = std::move(that.range_);
	offset_ = std::move(that.offset_);
	assert_invariant();
	return *this;
}
Example #5
0
 // return 0 if empty
 void *get() {
     assert_invariant();
     return (*this)?ptr:0;
 }
Example #6
0
 ref_count_ptr(void *ptr_, void (*dtor_)(void *)): ptr(ptr_), dtor(dtor_), k(0) {
     if (ptr_) k=new size_t(1);
     assert_invariant();
 }
Example #7
0
 ref_count_ptr(const ref_count_ptr &r): ptr(r.ptr), dtor(r.dtor), k(r.k) {
     if (*this) ++*k;
     assert_invariant();
 }
Example #8
0
 ~ref_count_ptr() {
     reset();
     assert_invariant();
 }