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 }