2 #include "pcheader.hpp"
8 VXArrayObj::VXArrayObj(VXSharedState
*ss
,VXInteger nsize
)
10 _values
.resize(nsize
);
12 ADD_TO_CHAIN(&_ss(this)->_gc_chain
,this);
15 VXArrayObj::~VXArrayObj()
17 REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain
,this);
20 VXArrayObj
* VXArrayObj::Create(VXSharedState
*ss
,VXInteger nInitialSize
)
22 VXArrayObj
*newarray
= (VXArrayObj
*)VX_MALLOC(sizeof(VXArrayObj
));
23 new (newarray
) VXArrayObj(ss
,nInitialSize
);
27 void VXArrayObj::Mark(VXCollectable
**chain
)
30 VXInteger len
= _values
.size();
31 for(VXInteger i
= 0;i
< len
; i
++)
33 VXSharedState::MarkObject(_values
[i
], chain
);
38 VXOType
VXArrayObj::GetType()
43 void VXArrayObj::Finalize()
47 bool VXArrayObj::Get(const VXInteger nidx
,VXObject
&val
)
49 if(nidx
>=0 && nidx
<(VXInteger
)_values
.size())
51 VXObject
&o
= _values
[nidx
];
58 bool VXArrayObj::Set(const VXInteger nidx
,const VXObject
&val
)
60 if(nidx
>=0 && nidx
< (VXInteger
)_values
.size())
68 Resize(nidx
+ 1, fill
);
69 return Set(nidx
, val
);
74 VXInteger
VXArrayObj::Next(const VXObject
&refpos
, VXObject
&outkey
, VXObject
&outval
)
76 VXUnsignedInteger idx
=TranslateIndex(refpos
);
77 while(idx
< _values
.size())
80 outkey
=(VXInteger
)idx
;
81 VXObject
&o
= _values
[idx
];
82 outval
= VX_REALVAL(o
);
83 //return idx for the next iteration
86 //nothing to iterate anymore
90 VXArrayObj
* VXArrayObj::Clone()
92 VXArrayObj
*anew
=Create(_opt_ss(this),0);
93 anew
->_values
.copy(_values
);
97 VXInteger
VXArrayObj::Size() const
99 return _values
.size();
102 void VXArrayObj::Resize(VXInteger size
)
108 void VXArrayObj::Resize(VXInteger size
,VXObject
&fill
)
110 _values
.resize(size
,fill
);
114 void VXArrayObj::Reserve(VXInteger size
)
116 _values
.reserve(size
);
119 void VXArrayObj::Append(const VXObject
&o
)
121 _values
.push_back(o
);
124 void VXArrayObj::Extend(const VXArrayObj
*a
)
128 for(VXInteger i
=0;i
<xlen
;i
++)
129 Append(a
->_values
[i
]);
133 VXObject
& VXArrayObj::Top()
135 return _values
.top();
138 void VXArrayObj::Pop()
144 bool VXArrayObj::Insert(VXInteger idx
,const VXRawObj
&val
)
146 if(idx
< 0 || idx
> (VXInteger
)_values
.size())
150 _values
.insert(idx
,val
);
154 void VXArrayObj::ShrinkIfNeeded()
157 if(_values
.size() <= _values
.capacity()>>2)
159 _values
.shrinktofit();
163 bool VXArrayObj::Remove(VXInteger idx
)
165 if(idx
< 0 || idx
>= (VXInteger
)_values
.size())
174 void VXArrayObj::Release()
176 vox_delete(this,VXArrayObj
);