tuplelist.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "pocketpy/objects/tuplelist.hpp"
  2. namespace pkpy {
  3. Tuple::Tuple(int n) {
  4. if(n <= INLINED_SIZE) {
  5. this->_args = _inlined;
  6. } else {
  7. this->_args = (PyVar*)std::malloc(n * sizeof(PyVar));
  8. }
  9. this->_size = n;
  10. }
  11. Tuple::Tuple(Tuple&& other) noexcept {
  12. _size = other._size;
  13. if(other.is_inlined()) {
  14. _args = _inlined;
  15. for(int i = 0; i < _size; i++)
  16. _args[i] = other._args[i];
  17. } else {
  18. _args = other._args;
  19. other._args = other._inlined;
  20. other._size = 0;
  21. }
  22. }
  23. Tuple::Tuple(PyVar _0, PyVar _1) : Tuple(2) {
  24. _args[0] = _0;
  25. _args[1] = _1;
  26. }
  27. Tuple::Tuple(PyVar _0, PyVar _1, PyVar _2) : Tuple(3) {
  28. _args[0] = _0;
  29. _args[1] = _1;
  30. _args[2] = _2;
  31. }
  32. Tuple::~Tuple() {
  33. if(!is_inlined()) std::free(_args);
  34. }
  35. List ArgsView::to_list() const {
  36. List ret(size());
  37. for(int i = 0; i < size(); i++)
  38. ret[i] = _begin[i];
  39. return ret;
  40. }
  41. Tuple ArgsView::to_tuple() const {
  42. Tuple ret(size());
  43. for(int i = 0; i < size(); i++)
  44. ret[i] = _begin[i];
  45. return ret;
  46. }
  47. } // namespace pkpy