File: customobject.cpp

package info (click to toggle)
analitza 4:17.08.3-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,824 kB
  • sloc: cpp: 26,899; perl: 63; sh: 16; makefile: 9
file content (64 lines) | stat: -rw-r--r-- 2,638 bytes parent folder | download | duplicates (3)
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
/*************************************************************************************
 *  Copyright (C) 2011 by Aleix Pol <aleixpol@kde.org>                               *
 *                                                                                   *
 *  This program is free software; you can redistribute it and/or                    *
 *  modify it under the terms of the GNU General Public License                      *
 *  as published by the Free Software Foundation; either version 2                   *
 *  of the License, or (at your option) any later version.                           *
 *                                                                                   *
 *  This program 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 General Public License for more details.                                     *
 *                                                                                   *
 *  You should have received a copy of the GNU General Public License                *
 *  along with this program; if not, write to the Free Software                      *
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA   *
 *************************************************************************************/

#include "customobject.h"
#include "abstractexpressionvisitor.h"

using namespace Analitza;

CustomObject::CustomObject(const QVariant& v, CustomObject::destructor f, int* r)
    : Object(Object::custom), m_destructor(f), m_refcount(r), m_value(v)
{}

CustomObject::CustomObject(const QVariant& v, CustomObject::destructor f)
    : Object(Object::custom), m_destructor(f), m_refcount(new int(1)), m_value(v)
{}

CustomObject::~CustomObject()
{
    (*m_refcount)--;
    if(*m_refcount==0) {
        delete m_refcount;
        
        if(m_destructor)
            m_destructor(m_value);
    }
}

Object* CustomObject::copy() const
{
    (*m_refcount)++;
    return new CustomObject(m_value, m_destructor, m_refcount);
}

bool CustomObject::matches(const Analitza::Object* exp, QMap< QString, const Analitza::Object* >* ) const
{
    bool ret = exp->type()==type();
    ret &= *this==*static_cast<const CustomObject*>(exp);
    return ret;
}

bool CustomObject::operator==(const CustomObject& obj) const
{
    return this==&obj || obj.m_value == m_value;
}

QVariant CustomObject::accept(AbstractExpressionVisitor* exp) const
{
    return exp->visit(this);
}