* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include "utils/mono-compiler.h"
#include "metadata/sgen-gc.h"
#include "metadata/sgen-pointer-queue.h"
queue->next_slot = 0;
}
+void
+sgen_pointer_queue_init (SgenPointerQueue *queue, int mem_type)
+{
+ queue->next_slot = 0;
+ queue->size = 0;
+ queue->data = NULL;
+ queue->mem_type = mem_type;
+}
+
static void
realloc_queue (SgenPointerQueue *queue)
{
size_t new_size = queue->size ? queue->size + queue->size/2 : 1024;
- void **new_data = sgen_alloc_internal_dynamic (sizeof (void*) * new_size, INTERNAL_MEM_PIN_QUEUE, TRUE);
+ void **new_data = sgen_alloc_internal_dynamic (sizeof (void*) * new_size, queue->mem_type, TRUE);
+
memcpy (new_data, queue->data, sizeof (void*) * queue->next_slot);
- sgen_free_internal_dynamic (queue->data, sizeof (void*) * queue->size, INTERNAL_MEM_PIN_QUEUE);
+ sgen_free_internal_dynamic (queue->data, sizeof (void*) * queue->size, queue->mem_type);
queue->data = new_data;
queue->size = new_size;
SGEN_LOG (4, "Reallocated pointer queue to size: %lu", new_size);
queue->data [queue->next_slot++] = ptr;
}
+void*
+sgen_pointer_queue_pop (SgenPointerQueue *queue)
+{
+ g_assert (queue->next_slot);
+
+ return queue->data [--queue->next_slot];
+}
+
size_t
sgen_pointer_queue_search (SgenPointerQueue *queue, void *addr)
{
return (size_t)-1;
}
+gboolean
+sgen_pointer_queue_is_empty (SgenPointerQueue *queue)
+{
+ return !queue->next_slot;
+}
+
+void
+sgen_pointer_queue_free (SgenPointerQueue *queue)
+{
+ sgen_free_internal_dynamic (queue->data, sizeof (void*) * queue->size, queue->mem_type);
+}
+
#endif