mirror of
https://github.com/mongodb/mongo.git
synced 2024-11-30 17:10:48 +01:00
121 lines
2.6 KiB
C++
121 lines
2.6 KiB
C++
// array.h
|
|
|
|
/*
|
|
* Copyright 2010 10gen Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
namespace mongo {
|
|
|
|
template<typename T>
|
|
class FastArray {
|
|
public:
|
|
FastArray( int capacity=10000 )
|
|
: _capacity( capacity ) , _size(0) , _end(this,capacity) {
|
|
_data = new T[capacity];
|
|
}
|
|
|
|
~FastArray() {
|
|
delete[] _data;
|
|
}
|
|
|
|
void clear() {
|
|
_size = 0;
|
|
}
|
|
|
|
T& operator[]( int x ) {
|
|
assert( x >= 0 && x < _capacity );
|
|
return _data[x];
|
|
}
|
|
|
|
T& getNext() {
|
|
return _data[_size++];
|
|
}
|
|
|
|
void push_back( const T& t ) {
|
|
_data[_size++] = t;
|
|
}
|
|
|
|
void sort( int (*comp)(const void *, const void *) ) {
|
|
qsort( _data , _size , sizeof(T) , comp );
|
|
}
|
|
|
|
int size() {
|
|
return _size;
|
|
}
|
|
|
|
bool hasSpace() {
|
|
return _size < _capacity;
|
|
}
|
|
class iterator {
|
|
public:
|
|
iterator() {
|
|
_it = 0;
|
|
_pos = 0;
|
|
}
|
|
|
|
iterator( FastArray * it , int pos=0 ) {
|
|
_it = it;
|
|
_pos = pos;
|
|
}
|
|
|
|
bool operator==(const iterator& other ) const {
|
|
return _pos == other._pos;
|
|
}
|
|
|
|
bool operator!=(const iterator& other ) const {
|
|
return _pos != other._pos;
|
|
}
|
|
|
|
void operator++() {
|
|
_pos++;
|
|
}
|
|
|
|
T& operator*() {
|
|
return _it->_data[_pos];
|
|
}
|
|
|
|
string toString() const {
|
|
stringstream ss;
|
|
ss << _pos;
|
|
return ss.str();
|
|
}
|
|
private:
|
|
FastArray * _it;
|
|
int _pos;
|
|
|
|
friend class FastArray;
|
|
};
|
|
|
|
|
|
iterator begin() {
|
|
return iterator(this);
|
|
}
|
|
|
|
iterator end() {
|
|
_end._pos = _size;
|
|
return _end;
|
|
}
|
|
|
|
|
|
private:
|
|
int _capacity;
|
|
int _size;
|
|
|
|
iterator _end;
|
|
|
|
T * _data;
|
|
};
|
|
}
|