Commit 9f269265 by Richard Kenner

(union sversion): New.

(struct sarray): Maintain multiple versions.
(sarray_remove_garbage): Add prototype.

From-SVN: r11446
parent 1ebb5fcc
/* Sparse Arrays for Objective C dispatch tables /* Sparse Arrays for Objective C dispatch tables
Copyright (C) 1993, 1995 Free Software Foundation, Inc. Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
Author: Kresten Krab Thorup Author: Kresten Krab Thorup
...@@ -42,6 +42,8 @@ extern const char* __objc_sparse3_id; ...@@ -42,6 +42,8 @@ extern const char* __objc_sparse3_id;
#include <stddef.h> #include <stddef.h>
#include "objc/thread.h"
extern int nbuckets; /* for stats */ extern int nbuckets; /* for stats */
extern int nindices; extern int nindices;
extern int narrays; extern int narrays;
...@@ -111,16 +113,21 @@ union sofftype { ...@@ -111,16 +113,21 @@ union sofftype {
void * __objc_xrealloc (void *optr, size_t size); void * __objc_xrealloc (void *optr, size_t size);
void * __objc_xmalloc (size_t size); void * __objc_xmalloc (size_t size);
union sversion {
int version;
void *next_free;
};
struct sbucket { struct sbucket {
void* elems[BUCKET_SIZE]; /* elements stored in array */ void* elems[BUCKET_SIZE]; /* elements stored in array */
short version; /* used for copy-on-write */ union sversion version; /* used for copy-on-write */
}; };
#ifdef OBJC_SPARSE3 #ifdef OBJC_SPARSE3
struct sindex { struct sindex {
struct sbucket* buckets[INDEX_SIZE]; struct sbucket* buckets[INDEX_SIZE];
short version; union sversion version; /* used for copy-on-write */
}; };
#endif /* OBJC_SPARSE3 */ #endif /* OBJC_SPARSE3 */
...@@ -133,7 +140,7 @@ struct sarray { ...@@ -133,7 +140,7 @@ struct sarray {
struct sbucket** buckets; struct sbucket** buckets;
#endif /* OBJC_SPARSE2 */ #endif /* OBJC_SPARSE2 */
struct sbucket* empty_bucket; struct sbucket* empty_bucket;
short version; union sversion version; /* used for copy-on-write */
short ref_count; short ref_count;
struct sarray* is_copy_of; struct sarray* is_copy_of;
size_t capacity; size_t capacity;
...@@ -142,10 +149,12 @@ struct sarray { ...@@ -142,10 +149,12 @@ struct sarray {
struct sarray* sarray_new(int, void* default_element); struct sarray* sarray_new(int, void* default_element);
void sarray_free(struct sarray*); void sarray_free(struct sarray*);
struct sarray* sarray_lazy_copy(struct sarray*); struct sarray* sarray_lazy_copy(struct sarray*);
struct sarray* sarray_hard_copy(struct sarray*); /* ... like the name? */
void sarray_realloc(struct sarray*, int new_size); void sarray_realloc(struct sarray*, int new_size);
void sarray_at_put(struct sarray*, sidx index, void* elem); void sarray_at_put(struct sarray*, sidx index, void* elem);
void sarray_at_put_safe(struct sarray*, sidx index, void* elem); void sarray_at_put_safe(struct sarray*, sidx index, void* elem);
struct sarray* sarray_hard_copy(struct sarray*); /* ... like the name? */
void sarray_remove_garbage(void);
#ifdef PRECOMPUTE_SELECTORS #ifdef PRECOMPUTE_SELECTORS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment