1 #include "ArrayValue.h"
\r
3 #include "ArrayType.h"
\r
7 #include "Constants.h"
\r
9 namespace Databoard {
\r
11 ArrayValue::ArrayValue(Databoard::Type::DataType* dataBoard) : Value(dataBoard)
\r
15 ArrayValue::~ArrayValue()
\r
20 void ArrayValue::add(Value* value)
\r
22 values.push_back(value);
\r
25 //void insert(Value* value, int index);
\r
26 int ArrayValue::count()
\r
28 return (int)values.size();
\r
31 void ArrayValue::remove(int index, int count)
\r
33 if(index >= 0 && (index+count) <= (int)values.size())
\r
35 for(int i = index; i < count; ++i)
\r
37 delete values.at(i);
\r
40 values.erase(values.begin(), values.begin() + count);
\r
44 void ArrayValue::clear()
\r
49 Value* ArrayValue::get(int index)
\r
51 return values.at(index);
\r
54 std::vector<Value*> ArrayValue::getAll()
\r
56 std::vector<Value*> v;
\r
58 for(int i = 0; i < (int)values.size(); ++i)
\r
60 v.push_back(values.at(i));
\r
67 std::string ArrayValue::writeOut(int /*indent*/)
\r
73 for(int i = 0; i < (int)values.size(); ++i)
\r
75 s += values.at(i)->writeOut();
\r
77 if(i != ((int)values.size()-1))
\r
88 bool ArrayValue::equals(const Value* other)
\r
90 ArrayValue* o = (ArrayValue*)other;
\r
92 if(this->count() < o->count())
\r
96 else if(this->count() > o->count())
\r
101 //for(int i = 0; i <(int)this->count(); ++i)
\r
103 // if(this->getField(i) < o->getField(i))
\r
109 return true;//(this->value < o->value);
\r
113 std::string ArrayValue::isValid()
\r
115 Databoard::Type::ArrayType* arrayType = dynamic_cast<Databoard::Type::ArrayType*>(dataBoard);
\r
117 if(arrayType == NULL)
\r
119 return "ArrayValue: type is not an array.";
\r
122 Range* r = arrayType->getLength();
\r
124 int countMin = r->getLower()->getInteger(INT_MIN);
\r
125 int countMax = r->getUpper()->getInteger(INT_MAX);
\r
127 int count = (int)values.size();
\r
129 if(count < countMin)
\r
131 return "ArrayValue: too few.";
\r
133 else if(count > countMax)
\r
135 return "ArrayValue: too many.";
\r