Small updates to util classes.
This commit is contained in:
parent
b03812af2b
commit
5375b39160
2 changed files with 24 additions and 1 deletions
|
|
@ -10,6 +10,15 @@ public:
|
|||
int32_t list_index;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
class indexed_list_element : public indexed_list_object {
|
||||
public:
|
||||
T value;
|
||||
indexed_list_element(T value) : value(value) {
|
||||
// Nop;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* An array list of objects that are aware of their position in the list.
|
||||
* Normally, objects in this list should derive from the base class
|
||||
|
|
|
|||
|
|
@ -7,7 +7,14 @@ template<typename T> class synchronized_indexed_list :
|
|||
public indexed_list<T> {
|
||||
spin_lock _lock;
|
||||
public:
|
||||
synchronized_indexed_list(memory_region ®ion) :
|
||||
/**
|
||||
* Clients can use this global lock that is associated with the list to
|
||||
* perform more coarse grained locking. Internally, the synchronized list
|
||||
* doesn'tactually make any use of this lock.
|
||||
*/
|
||||
spin_lock global;
|
||||
|
||||
synchronized_indexed_list(memory_region *region) :
|
||||
indexed_list<T>(region) {
|
||||
// Nop.
|
||||
}
|
||||
|
|
@ -20,6 +27,13 @@ public:
|
|||
return index;
|
||||
}
|
||||
|
||||
bool pop(T **value) {
|
||||
_lock.lock();
|
||||
bool result = indexed_list<T>::pop(value);
|
||||
_lock.unlock();
|
||||
return result;
|
||||
}
|
||||
|
||||
size_t length() {
|
||||
size_t length = 0;
|
||||
_lock.lock();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue