summaryrefslogtreecommitdiff
path: root/value.cc
diff options
context:
space:
mode:
authorkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-30 04:17:05 (GMT)
committerkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-30 04:17:05 (GMT)
commit6940d171812565209efe679a5d923417c3f47d4a (patch)
tree2a05d2f8865ff1127f854db41bf31143f64ccf2d /value.cc
parent2b19f33ee1ddce246c2bfe0a05fe379d0117a741 (diff)
reorganized file structure layout. more to follow...
git-svn-id: http://svn.clifford.at/openscad/trunk@364 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'value.cc')
-rw-r--r--value.cc346
1 files changed, 0 insertions, 346 deletions
diff --git a/value.cc b/value.cc
deleted file mode 100644
index a02a27f..0000000
--- a/value.cc
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * OpenSCAD (www.openscad.at)
- * Copyright (C) 2009 Clifford Wolf <clifford@clifford.at>
- *
- * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#include "openscad.h"
-
-Value::Value()
-{
- reset_undef();
-}
-
-Value::~Value()
-{
- for (int i = 0; i < vec.size(); i++)
- delete vec[i];
- vec.clear();
-}
-
-Value::Value(bool v)
-{
- reset_undef();
- type = BOOL;
- b = v;
-}
-
-Value::Value(double v)
-{
- reset_undef();
- type = NUMBER;
- num = v;
-}
-
-Value::Value(const QString &t)
-{
- reset_undef();
- type = STRING;
- text = t;
-}
-
-Value::Value(const Value &v)
-{
- *this = v;
-}
-
-Value& Value::operator = (const Value &v)
-{
- reset_undef();
- type = v.type;
- b = v.b;
- num = v.num;
- for (int i = 0; i < v.vec.size(); i++)
- vec.append(new Value(*v.vec[i]));
- range_begin = v.range_begin;
- range_step = v.range_step;
- range_end = v.range_end;
- text = v.text;
- return *this;
-}
-
-Value Value::operator ! () const
-{
- if (type == BOOL) {
- return Value(!b);
- }
- return Value();
-}
-
-Value Value::operator && (const Value &v) const
-{
- if (type == BOOL && v.type == BOOL) {
- return Value(b && v.b);
- }
- return Value();
-}
-
-Value Value::operator || (const Value &v) const
-{
- if (type == BOOL && v.type == BOOL) {
- return Value(b || v.b);
- }
- return Value();
-}
-
-Value Value::operator + (const Value &v) const
-{
- if (type == VECTOR && v.type == VECTOR) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < vec.size() && i < v.vec.size(); i++)
- r.vec.append(new Value(*vec[i] + *v.vec[i]));
- return r;
- }
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num + v.num);
- }
- return Value();
-}
-
-Value Value::operator - (const Value &v) const
-{
- if (type == VECTOR && v.type == VECTOR) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < vec.size() && i < v.vec.size(); i++)
- r.vec.append(new Value(*vec[i] - *v.vec[i]));
- return r;
- }
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num - v.num);
- }
- return Value();
-}
-
-Value Value::operator * (const Value &v) const
-{
- if (type == VECTOR && v.type == NUMBER) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < vec.size(); i++)
- r.vec.append(new Value(*vec[i] * v));
- return r;
- }
- if (type == NUMBER && v.type == VECTOR) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < v.vec.size(); i++)
- r.vec.append(new Value(v * *v.vec[i]));
- return r;
- }
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num * v.num);
- }
- return Value();
-}
-
-Value Value::operator / (const Value &v) const
-{
- if (type == VECTOR && v.type == NUMBER) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < vec.size(); i++)
- r.vec.append(new Value(*vec[i] / v));
- return r;
- }
- if (type == NUMBER && v.type == VECTOR) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < v.vec.size(); i++)
- r.vec.append(new Value(v / *v.vec[i]));
- return r;
- }
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num / v.num);
- }
- return Value();
-}
-
-Value Value::operator % (const Value &v) const
-{
- if (type == NUMBER && v.type == NUMBER) {
- return Value(fmod(num, v.num));
- }
- return Value();
-}
-
-Value Value::operator < (const Value &v) const
-{
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num < v.num);
- }
- return Value();
-}
-
-Value Value::operator <= (const Value &v) const
-{
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num <= v.num);
- }
- return Value();
-}
-
-Value Value::operator == (const Value &v) const
-{
- if (type == BOOL && v.type == BOOL) {
- return Value(b == v.b);
- }
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num == v.num);
- }
- if (type == RANGE && v.type == RANGE) {
- return Value(range_begin == v.range_begin && range_step == v.range_step && range_end == v.range_end);
- }
- if (type == VECTOR && v.type == VECTOR) {
- if (vec.size() != v.vec.size())
- return Value(false);
- for (int i=0; i<vec.size(); i++)
- if (!(*vec[i] == *v.vec[i]).b)
- return Value(false);
- return Value(true);
- }
- if (type == STRING && v.type == STRING) {
- return Value(text == v.text);
- }
- return Value(false);
-}
-
-Value Value::operator != (const Value &v) const
-{
- Value eq = *this == v;
- return Value(!eq.b);
-}
-
-Value Value::operator >= (const Value &v) const
-{
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num >= v.num);
- }
- return Value();
-}
-
-Value Value::operator > (const Value &v) const
-{
- if (type == NUMBER && v.type == NUMBER) {
- return Value(num > v.num);
- }
- return Value();
-}
-
-Value Value::inv() const
-{
- if (type == VECTOR) {
- Value r;
- r.type = VECTOR;
- for (int i = 0; i < vec.size(); i++)
- r.vec.append(new Value(vec[i]->inv()));
- return r;
- }
- if (type == NUMBER)
- return Value(-num);
- return Value();
-}
-
-bool Value::getnum(double &v) const
-{
- if (type != NUMBER)
- return false;
- v = num;
- return true;
-}
-
-bool Value::getv2(double &x, double &y) const
-{
- if (type != VECTOR || vec.size() != 2)
- return false;
- if (vec[0]->type != NUMBER)
- return false;
- if (vec[1]->type != NUMBER)
- return false;
- x = vec[0]->num;
- y = vec[1]->num;
- return true;
-}
-
-bool Value::getv3(double &x, double &y, double &z) const
-{
- if (type == VECTOR && vec.size() == 2) {
- if (getv2(x, y)) {
- z = 0;
- return true;
- }
- return false;
- }
- if (type != VECTOR || vec.size() != 3)
- return false;
- if (vec[0]->type != NUMBER)
- return false;
- if (vec[1]->type != NUMBER)
- return false;
- if (vec[2]->type != NUMBER)
- return false;
- x = vec[0]->num;
- y = vec[1]->num;
- z = vec[2]->num;
- return true;
-}
-
-QString Value::dump() const
-{
- if (type == STRING) {
- return QString("\"") + text + QString("\"");
- }
- if (type == VECTOR) {
- QString text = "[";
- for (int i = 0; i < vec.size(); i++) {
- if (i > 0)
- text += ", ";
- text += vec[i]->dump();
- }
- return text + "]";
- }
- if (type == RANGE) {
- QString text;
- text.sprintf("[ %g : %g : %g ]", range_begin, range_step, range_end);
- return text;
- }
- if (type == NUMBER) {
- QString text;
- text.sprintf("%g", num);
- return text;
- }
- if (type == BOOL) {
- return QString(b ? "true" : "false");
- }
- return QString("undef");
-}
-
-void Value::reset_undef()
-{
- type = UNDEFINED;
- b = false;
- num = 0;
- for (int i = 0; i < vec.size(); i++)
- delete vec[i];
- vec.clear();
- range_begin = 0;
- range_step = 0;
- range_end = 0;
- text = QString();
-}
-
contact: Jan Huwald // Impressum