about summary refs log tree commit diff
path: root/src/rt
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@mozilla.com>2010-09-07 18:22:03 -0700
committerMichael Bebenita <mbebenita@mozilla.com>2010-09-07 18:41:08 -0700
commit5375b3916095970bc87675969b2fb00d9bebcfd8 (patch)
tree047e13e64c48dfcf26268a2bd125f1645d660301 /src/rt
parentb03812af2b65a31c567945a1c41515602ff92c20 (diff)
downloadrust-5375b3916095970bc87675969b2fb00d9bebcfd8.tar.gz
rust-5375b3916095970bc87675969b2fb00d9bebcfd8.zip
Small updates to util classes.
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/util/indexed_list.h9
-rw-r--r--src/rt/util/synchronized_indexed_list.h16
2 files changed, 24 insertions, 1 deletions
diff --git a/src/rt/util/indexed_list.h b/src/rt/util/indexed_list.h
index cd39a0b60d7..b93945cc9cb 100644
--- a/src/rt/util/indexed_list.h
+++ b/src/rt/util/indexed_list.h
@@ -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
diff --git a/src/rt/util/synchronized_indexed_list.h b/src/rt/util/synchronized_indexed_list.h
index ca02f6efdd2..a7f79a74fa2 100644
--- a/src/rt/util/synchronized_indexed_list.h
+++ b/src/rt/util/synchronized_indexed_list.h
@@ -7,7 +7,14 @@ template<typename T> class synchronized_indexed_list :
     public indexed_list<T> {
     spin_lock _lock;
 public:
-    synchronized_indexed_list(memory_region &region) :
+    /**
+     * 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();