3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 10:25:18 +00:00

array uses unique_ptr (#5171)

* array uses unique_ptr

* Constructor initalize m_array over set it

* prefer arr.get() to &arr[0]
This commit is contained in:
Zachary Wimer 2021-04-12 13:01:24 -07:00 committed by GitHub
parent ff1b35663b
commit d73b883b38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -24,6 +24,7 @@ Notes:
#include<iostream>
#include<string>
#include<sstream>
#include<memory>
#include<z3.h>
#include<limits.h>
#include<functional>
@ -392,21 +393,20 @@ namespace z3 {
template<typename T>
class array {
T * m_array;
std::unique_ptr<T[]> m_array;
unsigned m_size;
array(array const & s);
array & operator=(array const & s);
array(array const & s) = delete;
array & operator=(array const & s) = delete;
public:
array(unsigned sz):m_size(sz) { m_array = new T[sz]; }
array(unsigned sz):m_array(new T[sz]),m_size(sz) {}
template<typename T2>
array(ast_vector_tpl<T2> const & v);
~array() { delete[] m_array; }
void resize(unsigned sz) { delete[] m_array; m_size = sz; m_array = new T[sz]; }
void resize(unsigned sz) { m_array.reset(new T[sz]); m_size = sz; }
unsigned size() const { return m_size; }
T & operator[](int i) { assert(0 <= i); assert(static_cast<unsigned>(i) < m_size); return m_array[i]; }
T const & operator[](int i) const { assert(0 <= i); assert(static_cast<unsigned>(i) < m_size); return m_array[i]; }
T const * ptr() const { return m_array; }
T * ptr() { return m_array; }
T const * ptr() const { return m_array.get(); }
T * ptr() { return m_array.get(); }
};
class object {
@ -1991,8 +1991,7 @@ namespace z3 {
template<typename T>
template<typename T2>
array<T>::array(ast_vector_tpl<T2> const & v) {
m_array = new T[v.size()];
array<T>::array(ast_vector_tpl<T2> const & v):m_array(new T[v.size()]) {
m_size = v.size();
for (unsigned i = 0; i < m_size; i++) {
m_array[i] = v[i];