Initial sgen mips port.
[mono.git] / mono / metadata / sgen-gray.c
index 653683a6be0b8ff2d8b5b3ade0b459781f1a31cd..958e86e961775e1ca137fbd9113abee72b2bda56 100644 (file)
@@ -30,6 +30,9 @@ gray_object_alloc_queue_section (GrayQueue *queue)
 {
        GrayQueueSection *section;
 
+       if (queue->alloc_prepare_func)
+               queue->alloc_prepare_func (queue);
+
        if (queue->free_list) {
                /* Use the previously allocated queue sections if possible */
                section = queue->free_list;
@@ -100,6 +103,29 @@ mono_sgen_gray_object_dequeue (GrayQueue *queue)
        return obj;
 }
 
+static GrayQueueSection*
+gray_object_dequeue_section (GrayQueue *queue)
+{
+       GrayQueueSection *section;
+
+       if (!queue->first)
+               return NULL;
+
+       section = queue->first;
+       queue->first = section->next;
+
+       section->next = NULL;
+
+       return section;
+}
+
+static void
+gray_object_enqueue_section (GrayQueue *queue, GrayQueueSection *section)
+{
+       section->next = queue->first;
+       queue->first = section;
+}
+
 static void
 gray_object_queue_init (GrayQueue *queue)
 {
@@ -121,3 +147,11 @@ gray_object_queue_init (GrayQueue *queue)
                gray_object_free_queue_section (next);
        }
 }
+
+static void
+gray_object_queue_init_with_alloc_prepare (GrayQueue *queue, GrayQueueAllocPrepareFunc func, void *data)
+{
+       gray_object_queue_init (queue);
+       queue->alloc_prepare_func = func;
+       queue->alloc_prepare_data = data;
+}