pocketpy/src/objects/tuplelist.cpp
2024-06-02 17:09:42 +08:00

51 lines
1.0 KiB
C++

#include "pocketpy/objects/tuplelist.hpp"
namespace pkpy {
Tuple::Tuple(int n){
if(n <= INLINED_SIZE){
this->_args = _inlined;
}else{
this->_args = (PyVar*)std::malloc(n * sizeof(PyVar));
}
this->_size = n;
}
Tuple::Tuple(Tuple&& other) noexcept {
_size = other._size;
if(other.is_inlined()){
_args = _inlined;
for(int i=0; i<_size; i++) _args[i] = other._args[i];
}else{
_args = other._args;
other._args = other._inlined;
other._size = 0;
}
}
Tuple::Tuple(PyVar _0, PyVar _1): Tuple(2){
_args[0] = _0;
_args[1] = _1;
}
Tuple::Tuple(PyVar _0, PyVar _1, PyVar _2): Tuple(3){
_args[0] = _0;
_args[1] = _1;
_args[2] = _2;
}
Tuple::~Tuple(){ if(!is_inlined()) std::free(_args); }
List ArgsView::to_list() const{
List ret(size());
for(int i=0; i<size(); i++) ret[i] = _begin[i];
return ret;
}
Tuple ArgsView::to_tuple() const{
Tuple ret(size());
for(int i=0; i<size(); i++) ret[i] = _begin[i];
return ret;
}
} // namespace pkpy