- source files and Makefiles need never be executable - scripts are run directly by their interpreters in the test suites, so also do not need to be executable
85 lines
2.6 KiB
OpenEdge ABL
85 lines
2.6 KiB
OpenEdge ABL
/* -----------------------------------------------------------------------------
|
|
* std_vector.i
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
%include <std_common.i>
|
|
|
|
%{
|
|
#include <vector>
|
|
#include <stdexcept>
|
|
%}
|
|
|
|
namespace std {
|
|
|
|
template<class T> class vector {
|
|
public:
|
|
typedef size_t size_type;
|
|
typedef T value_type;
|
|
typedef const value_type& const_reference;
|
|
vector();
|
|
vector(size_type n);
|
|
size_type size() const;
|
|
size_type capacity() const;
|
|
void reserve(size_type n);
|
|
%rename(isEmpty) empty;
|
|
bool empty() const;
|
|
void clear();
|
|
%rename(add) push_back;
|
|
void push_back(const value_type& x);
|
|
%extend {
|
|
const_reference get(int i) throw (std::out_of_range) {
|
|
int size = int(self->size());
|
|
if (i>=0 && i<size)
|
|
return (*self)[i];
|
|
else
|
|
throw std::out_of_range("vector index out of range");
|
|
}
|
|
void set(int i, const value_type& val) throw (std::out_of_range) {
|
|
int size = int(self->size());
|
|
if (i>=0 && i<size)
|
|
(*self)[i] = val;
|
|
else
|
|
throw std::out_of_range("vector index out of range");
|
|
}
|
|
}
|
|
};
|
|
|
|
// bool specialization
|
|
template<> class vector<bool> {
|
|
public:
|
|
typedef size_t size_type;
|
|
typedef bool value_type;
|
|
typedef bool const_reference;
|
|
vector();
|
|
vector(size_type n);
|
|
size_type size() const;
|
|
size_type capacity() const;
|
|
void reserve(size_type n);
|
|
%rename(isEmpty) empty;
|
|
bool empty() const;
|
|
void clear();
|
|
%rename(add) push_back;
|
|
void push_back(const value_type& x);
|
|
%extend {
|
|
const_reference get(int i) throw (std::out_of_range) {
|
|
int size = int(self->size());
|
|
if (i>=0 && i<size)
|
|
return (*self)[i];
|
|
else
|
|
throw std::out_of_range("vector index out of range");
|
|
}
|
|
void set(int i, const value_type& val) throw (std::out_of_range) {
|
|
int size = int(self->size());
|
|
if (i>=0 && i<size)
|
|
(*self)[i] = val;
|
|
else
|
|
throw std::out_of_range("vector index out of range");
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
%define specialize_std_vector(T)
|
|
#warning "specialize_std_vector - specialization for type T no longer needed"
|
|
%enddef
|
|
|