mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-09-01 06:59:20 +00:00
1
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
%{
|
||||
#include <algorithm>
|
||||
%}
|
||||
|
||||
//
|
||||
// std::carray - is really an extension to the 'std' namespace.
|
||||
//
|
||||
// A simple fix C array wrapper, more or less as presented in
|
||||
//
|
||||
// "The C++ Standarf Library", by Nicolai M. Josuttis
|
||||
//
|
||||
// which is also derived from the example in
|
||||
//
|
||||
// "The C++ Programming Language", by Bjarne Stroustup.
|
||||
//
|
||||
|
||||
%inline %{
|
||||
namespace std {
|
||||
template <class _Type, size_t _Size>
|
||||
class carray
|
||||
{
|
||||
public:
|
||||
typedef _Type value_type;
|
||||
typedef size_t size_type;
|
||||
|
||||
typedef _Type * iterator;
|
||||
typedef const _Type * const_iterator;
|
||||
|
||||
carray() { }
|
||||
|
||||
carray(const carray& c) {
|
||||
std::copy(c.v, c.v + size(), v);
|
||||
}
|
||||
|
||||
template <class _Iterator>
|
||||
carray(_Iterator first, _Iterator last) {
|
||||
assign(first, last);
|
||||
}
|
||||
|
||||
iterator begin() { return v; }
|
||||
iterator end() { return v + _Size; }
|
||||
|
||||
const_iterator begin() const { return v; }
|
||||
const_iterator end() const { return v + _Size; }
|
||||
|
||||
_Type& operator[](size_t i) { return v[i]; }
|
||||
const _Type& operator[](size_t i) const { return v[i]; }
|
||||
|
||||
static size_t size() { return _Size; }
|
||||
|
||||
template <class _Iterator>
|
||||
void assign(_Iterator first, _Iterator last) {
|
||||
if (std::distance(first,last) == size()) {
|
||||
std::copy(first, last, v);
|
||||
} else {
|
||||
throw std::length_error("bad range length");
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
_Type v[_Size];
|
||||
};
|
||||
}
|
||||
%}
|
||||
Reference in New Issue
Block a user