File indexing completed on 2024-04-28 03:40:41

0001 /*************************************************************************************
0002  *  Copyright (C) 2011 by Aleix Pol <aleixpol@kde.org>                               *
0003  *                                                                                   *
0004  *  This program is free software; you can redistribute it and/or                    *
0005  *  modify it under the terms of the GNU General Public License                      *
0006  *  as published by the Free Software Foundation; either version 2                   *
0007  *  of the License, or (at your option) any later version.                           *
0008  *                                                                                   *
0009  *  This program is distributed in the hope that it will be useful,                  *
0010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of                   *
0011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                    *
0012  *  GNU General Public License for more details.                                     *
0013  *                                                                                   *
0014  *  You should have received a copy of the GNU General Public License                *
0015  *  along with this program; if not, write to the Free Software                      *
0016  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA   *
0017  *************************************************************************************/
0018 
0019 #include "customobject.h"
0020 #include "abstractexpressionvisitor.h"
0021 
0022 using namespace Analitza;
0023 
0024 CustomObject::CustomObject(const QVariant& v, CustomObject::destructor f, int* r)
0025     : Object(Object::custom), m_destructor(f), m_refcount(r), m_value(v)
0026 {}
0027 
0028 CustomObject::CustomObject(const QVariant& v, CustomObject::destructor f)
0029     : Object(Object::custom), m_destructor(f), m_refcount(new int(1)), m_value(v)
0030 {}
0031 
0032 CustomObject::~CustomObject()
0033 {
0034     (*m_refcount)--;
0035     if(*m_refcount==0) {
0036         delete m_refcount;
0037         
0038         if(m_destructor)
0039             m_destructor(m_value);
0040     }
0041 }
0042 
0043 Object* CustomObject::copy() const
0044 {
0045     (*m_refcount)++;
0046     return new CustomObject(m_value, m_destructor, m_refcount);
0047 }
0048 
0049 bool CustomObject::matches(const Analitza::Object* exp, QMap< QString, const Analitza::Object* >* ) const
0050 {
0051     bool ret = exp->type()==type();
0052     ret &= *this==*static_cast<const CustomObject*>(exp);
0053     return ret;
0054 }
0055 
0056 bool CustomObject::operator==(const CustomObject& obj) const
0057 {
0058     return this==&obj || obj.m_value == m_value;
0059 }
0060 
0061 QVariant CustomObject::accept(AbstractExpressionVisitor* exp) const
0062 {
0063     return exp->visit(this);
0064 }