mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
C++11 range loop support for XmlNode, ValueArray, Value #1264
git-svn-id: svn://ultimatepp.org/upp/trunk@8920 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
555942682d
commit
02d258a434
6 changed files with 67 additions and 5 deletions
|
|
@ -610,6 +610,26 @@ const Value& Value::operator[](int i) const
|
|||
return ErrorValue();
|
||||
}
|
||||
|
||||
const Vector<Value>& Value::GetVA() const
|
||||
{
|
||||
if(IsRef()) {
|
||||
dword t = ptr()->GetType();
|
||||
if(t == VALUEARRAY_V)
|
||||
return ((ValueArray::Data *)ptr())->data;
|
||||
}
|
||||
return ValueArray::VoidData;
|
||||
}
|
||||
|
||||
Value::ConstIterator Value::Begin() const
|
||||
{
|
||||
return GetVA().Begin();
|
||||
}
|
||||
|
||||
Value::ConstIterator Value::End() const
|
||||
{
|
||||
return GetVA().End();
|
||||
}
|
||||
|
||||
Vector<Value>& Value::CloneArray()
|
||||
{
|
||||
ValueArray::Data *data = (ValueArray::Data *)ptr();
|
||||
|
|
|
|||
|
|
@ -178,6 +178,8 @@ protected:
|
|||
|
||||
Vector<Value>& CloneArray();
|
||||
|
||||
const Vector<Value>& GetVA() const;
|
||||
|
||||
#if defined(_DEBUG) && defined(COMPILER_GCC)
|
||||
uint32 magic[4];
|
||||
void Magic() { magic[0] = 0xc436d851; magic[1] = 0x72f67c76; magic[2] = 0x3e5e10fd; magic[3] = 0xc90d370b; }
|
||||
|
|
@ -274,6 +276,18 @@ public:
|
|||
const Void *GetVoidPtr() const { ASSERT(IsRef()); return ptr(); }
|
||||
|
||||
friend void Swap(Value& a, Value& b) { Swap(a.data, b.data); }
|
||||
|
||||
typedef Vector<Value>::ConstIterator ConstIterator;
|
||||
ConstIterator Begin() const;
|
||||
ConstIterator End() const;
|
||||
|
||||
typedef Value value_type;
|
||||
typedef ConstIterator const_iterator;
|
||||
typedef const Value& const_reference;
|
||||
typedef int size_type;
|
||||
typedef int difference_type;
|
||||
const_iterator begin() const { return Begin(); }
|
||||
const_iterator end() const { return End(); }
|
||||
};
|
||||
|
||||
struct ValueTypeError : Exc {
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ String ValueArray::Data::AsString() const
|
|||
return sAsString(data);
|
||||
}
|
||||
|
||||
Vector<Value> ValueArray::VoidData;
|
||||
|
||||
Vector<Value>& ValueArray::Create()
|
||||
{
|
||||
data = new Data;
|
||||
|
|
|
|||
|
|
@ -215,6 +215,8 @@ class ValueArray : public ValueType<ValueArray, VALUEARRAY_V, Moveable<ValueArra
|
|||
struct NullData : Data {};
|
||||
Data *data;
|
||||
|
||||
static Vector<Value> VoidData;
|
||||
|
||||
Vector<Value>& Create();
|
||||
Vector<Value>& Clone();
|
||||
void Init0();
|
||||
|
|
@ -254,7 +256,7 @@ public:
|
|||
void Set(int i, const Value& v);
|
||||
const Value& Get(int i) const;
|
||||
Value GetAndClear(int i);
|
||||
const Vector<Value>& Get() const { return data->data; }
|
||||
const Vector<Value>& Get() const { return data ? data->data : VoidData; }
|
||||
Vector<Value> Pick();
|
||||
|
||||
void Remove(int i, int count = 1);
|
||||
|
|
@ -280,6 +282,18 @@ public:
|
|||
bool operator>=(const ValueArray& x) const { return Compare(x) >= 0; }
|
||||
bool operator<(const ValueArray& x) const { return Compare(x) < 0; }
|
||||
bool operator>(const ValueArray& x) const { return Compare(x) > 0; }
|
||||
|
||||
typedef Vector<Value>::ConstIterator ConstIterator;
|
||||
ConstIterator Begin() const { return Get().Begin(); }
|
||||
ConstIterator End() const { return Get().End(); }
|
||||
|
||||
typedef Value value_type;
|
||||
typedef ConstIterator const_iterator;
|
||||
typedef const Value& const_reference;
|
||||
typedef int size_type;
|
||||
typedef int difference_type;
|
||||
const_iterator begin() const { return Begin(); }
|
||||
const_iterator end() const { return End(); }
|
||||
};
|
||||
|
||||
template<>
|
||||
|
|
|
|||
|
|
@ -232,6 +232,18 @@ public:
|
|||
XmlNode(const XmlNode& n, int);
|
||||
|
||||
XmlNode() { type = XML_DOC; }
|
||||
|
||||
typedef Array<XmlNode>::ConstIterator ConstIterator;
|
||||
ConstIterator Begin() const { return node.Begin(); }
|
||||
ConstIterator End() const { return node.End(); }
|
||||
|
||||
typedef XmlNode value_type;
|
||||
typedef ConstIterator const_iterator;
|
||||
typedef const XmlNode& const_reference;
|
||||
typedef int size_type;
|
||||
typedef int difference_type;
|
||||
const_iterator begin() const { return Begin(); }
|
||||
const_iterator end() const { return End(); }
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue