SforzandoCF

cpputil

Oct 3rd, 2025
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.42 KB | None | 0 0
  1. template<typename T>
  2. class Array {
  3.     T* data;
  4.     int size;
  5.    
  6.     public:
  7.         Array () {
  8.             this->data = new T[0];
  9.             this->size = 0;
  10.         }
  11.    
  12.         Array (T* data, int size) {
  13.             this->data = data;
  14.             this->size = size;
  15.         }
  16.    
  17.         Array (Array<T> data) {
  18.             this->data = data.data;
  19.             this->size = data.size;
  20.         }
  21.    
  22.         T add (T value) {
  23.             return this->add(new T[] { value }, 1);
  24.         }
  25.    
  26.         T add (T value, int index) {
  27.             return this->add(new T[] { value }, 1, index);
  28.         }
  29.    
  30.         T add (Array<T> value) {
  31.             return this->add(value.data, value.size);
  32.         }
  33.    
  34.         T add (Array<T> value, int index) {
  35.             return this->add(value.data, value.size, index);
  36.         }
  37.    
  38.         T add (T* value, int len) {
  39.             this->expand(len);
  40.             this->set(value, this->size, len);
  41.             this->size += len;
  42.             return value;
  43.         }
  44.    
  45.         T add (T* value, int len, int index) {
  46.             this->expand(len);
  47.             int size = this->size - index;
  48.             Array<T> after = this->get(index, size);
  49.             this->set(after.data, index + len, size);
  50.             this->set(value, index, len);
  51.             this->size++;
  52.             return value;
  53.         }
  54.    
  55.         Array<T> operator + (T value) {
  56.             this->clone().add(value);
  57.             return *this;
  58.         }
  59.    
  60.         Array<T> operator + (Array<T> value) {
  61.             this->clone().add(value);
  62.             return *this;
  63.         }
  64.    
  65.         Array<T> operator += (T value) {
  66.             this->add(value);
  67.             return *this;
  68.         }
  69.    
  70.         Array<T> operator += (Array<T> value) {
  71.             this->add(value);
  72.             return *this;
  73.         }
  74.    
  75.         T remove (int index) {
  76.             if (index < 0) return NULL;
  77.             if (index >= this->size) return NULL;
  78.             T value = this->data[index];
  79.             if (index != this->size - 1) {
  80.                 int size = this->size - index;
  81.                 T* after = this->get(index, size);
  82.                 this->set(after, index - 1, size);
  83.             }
  84.             this->data[this->size - 1] = NULL;
  85.             this->size--;
  86.             return value;
  87.         }
  88.    
  89.         T remove (T value) {
  90.             return this->remove(this->indexOf(value));
  91.         }
  92.    
  93.         Array<T> remove (Array<T> value) {
  94.             return this->remove(value.data, value.size);
  95.         }
  96.    
  97.         Array<T> remove (T* value, int len) {
  98.             Array<T> array = Array<T>();
  99.             for (int i = 0; i < len; i++) {
  100.                 if (this->remove(value[i]) != NULL)
  101.                     array.add(value[i]);
  102.             }
  103.             return array;
  104.         }
  105.    
  106.         Array<T> operator - (int index) {
  107.             this->clone().remove(index);
  108.             return *this;
  109.         }
  110.    
  111.         Array<T> operator - (T value) {
  112.             this->clone().remove(value);
  113.             return *this;
  114.         }
  115.    
  116.         Array<T> operator - (Array<T> value) {
  117.             this->clone().remove(value);
  118.             return *this;
  119.         }
  120.    
  121.         Array<T> operator -= (int index) {
  122.             this->remove(index);
  123.             return *this;
  124.         }
  125.    
  126.         Array<T> operator -= (T value) {
  127.             this->remove(value);
  128.             return *this;
  129.         }
  130.    
  131.         Array<T> operator -= (Array<T> value) {
  132.             this->remove(value);
  133.             return *this;
  134.         }
  135.    
  136.         Array<T> retain (Array<T> value) {
  137.             return this->retain(value.data, value.size);
  138.         }
  139.    
  140.         Array<T> retain (T* value, int len) {
  141.             Array<T> array = Array<T>();
  142.             for (int i = 0; i < len; i++) {
  143.                 if (this->indexOf(value[i]) != -1)
  144.                     array.add(value[i]);
  145.             }
  146.             this->data = array.data;
  147.             this->size = array.size;
  148.             return array;
  149.         }
  150.    
  151.         Array<T> operator * (Array<T> value) {
  152.             this->clone().retain(value);
  153.             return *this;
  154.         }
  155.    
  156.         Array<T> operator *= (Array<T> value) {
  157.             this->retain(value);
  158.             return *this;
  159.         }
  160.    
  161.         int compare (Array<T> value) {
  162.             if (this->size != value.size) return this->size - value.size;
  163.             for (int i = 0; i < this->size; i++)
  164.                 if (this->data[i] != value.data[i])
  165.                     return i;
  166.             return 0;
  167.         }
  168.    
  169.         bool operator == (Array<T> value) {
  170.             return this->compare(value) == 0;
  171.         }
  172.    
  173.         bool operator != (Array<T> value) {
  174.             return this->compare(value) != 0;
  175.         }
  176.    
  177.         T* operator & () {
  178.             return this->data;
  179.         }
  180.    
  181.         Array<T> operator << (T value) {
  182.             this->add(value);
  183.             return *this;
  184.         }
  185.    
  186.         Array<T> operator << (Array<T> value) {
  187.             this->add(value);
  188.             return *this;
  189.         }
  190.    
  191.         T operator >> (T* value) {
  192.             value = this->get(0);
  193.             return *value;
  194.         }
  195.    
  196.         Array<T> operator >> (Array<T>* value) {
  197.             value = this->clone();
  198.             return *value;
  199.         }
  200.    
  201.         T operator [] (int target) {
  202.             return this->get(target);
  203.         }
  204.    
  205.         int operator [] (T target) {
  206.             return this->indexOf(target);
  207.         }
  208.    
  209.         int indexOf (T target) {
  210.             for (int i = 0; i < this->size; i++)
  211.                 if (this->data[i] == target)
  212.                     return i;
  213.             return -1;
  214.         }
  215.    
  216.         bool contains (T target) {
  217.             return this->indexOf(target) != -1;
  218.         }
  219.    
  220.         bool containsAll (Array<T> target) {
  221.             if (target.size > this->size) return false;
  222.             for (int i = 0; i < target.size; i++)
  223.                 if (!this->contains(target[i]))
  224.                     return false;
  225.             return true;
  226.         }
  227.    
  228.         bool containsAny (Array<T> target) {
  229.             for (int i = 0; i < target.size; i++)
  230.                 if (this->contains(target[i]))
  231.                     return true;
  232.             return false;
  233.         }
  234.    
  235.         Array<T> clone () {
  236.             T nt[this->size];
  237.             for (int i = 0; i < this->size; i++)
  238.                 nt[i] = this->data[i];
  239.             return Array<T>(nt, this->size);
  240.         }
  241.    
  242.         T get (int index) {
  243.             if (index < 0) return NULL;
  244.             if (index >= this->size) return NULL;
  245.             return this->data[index];
  246.         }
  247.    
  248.         bool isEmpty () {
  249.             return this->size == 0;
  250.         }
  251.    
  252.         Array<T> reverse () {
  253.             T nt[this->size];
  254.             for (int i = 0; i < this->size; i++)
  255.                 nt[this->size - 1 - i] = this->data[i];
  256.             this->data = nt;
  257.             return this;
  258.         }
  259.    
  260.         T replace (T value, int index) {
  261.             T old = this.get(index);
  262.             if (old) this->data[index] = value;
  263.             return old;
  264.         }
  265.    
  266.         int getSize () {
  267.             return this->size;
  268.         }
  269.    
  270.         Array<T> get (int index, int length) {
  271.             return new Array<T>(this->data[index], length);
  272.         }
  273.    
  274.     private:
  275.         void set (T* value, int index, int length) {
  276.             for (int i = 0; i < length; i++)
  277.                 this->data[index + i] = value[i];
  278.         }
  279. }
Advertisement
Add Comment
Please, Sign In to add comment