Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 1 | #ifndef OBJECT_H |
| 2 | #define OBJECT_H |
| 3 | |
| 4 | struct object_list { |
| 5 | struct object *item; |
| 6 | struct object_list *next; |
| 7 | }; |
| 8 | |
Linus Torvalds | 1f1e895 | 2006-06-19 17:42:35 -0700 | [diff] [blame] | 9 | struct object_array { |
| 10 | unsigned int nr; |
| 11 | unsigned int alloc; |
| 12 | struct object_array_entry { |
| 13 | struct object *item; |
| 14 | const char *name; |
Martin Koegler | e5709a4 | 2007-04-22 18:43:58 +0200 | [diff] [blame] | 15 | unsigned mode; |
Linus Torvalds | 1f1e895 | 2006-06-19 17:42:35 -0700 | [diff] [blame] | 16 | } *objects; |
| 17 | }; |
| 18 | |
Thiago Farina | 3cd4745 | 2010-08-28 23:04:17 -0300 | [diff] [blame] | 19 | #define OBJECT_ARRAY_INIT { 0, 0, NULL } |
| 20 | |
Linus Torvalds | 885a86a | 2006-06-14 16:45:13 -0700 | [diff] [blame] | 21 | #define TYPE_BITS 3 |
| 22 | #define FLAG_BITS 27 |
| 23 | |
Linus Torvalds | 1974632 | 2006-07-11 20:45:31 -0700 | [diff] [blame] | 24 | /* |
| 25 | * The object type is stored in 3 bits. |
| 26 | */ |
Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 27 | struct object { |
| 28 | unsigned parsed : 1; |
| 29 | unsigned used : 1; |
Linus Torvalds | 885a86a | 2006-06-14 16:45:13 -0700 | [diff] [blame] | 30 | unsigned type : TYPE_BITS; |
| 31 | unsigned flags : FLAG_BITS; |
Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 32 | unsigned char sha1[20]; |
Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 33 | }; |
| 34 | |
Nicolas Pitre | df84366 | 2007-02-26 14:55:58 -0500 | [diff] [blame] | 35 | extern const char *typename(unsigned int type); |
| 36 | extern int type_from_string(const char *str); |
Linus Torvalds | 885a86a | 2006-06-14 16:45:13 -0700 | [diff] [blame] | 37 | |
Linus Torvalds | fc046a7 | 2006-06-29 21:38:55 -0700 | [diff] [blame] | 38 | extern unsigned int get_max_object_index(void); |
| 39 | extern struct object *get_indexed_object(unsigned int); |
Linus Torvalds | 3e4339e | 2006-06-18 11:45:02 -0700 | [diff] [blame] | 40 | |
Junio C Hamano | 628b06d | 2008-09-10 12:22:35 -0700 | [diff] [blame] | 41 | /* |
| 42 | * This can be used to see if we have heard of the object before, but |
| 43 | * it can return "yes we have, and here is a half-initialised object" |
| 44 | * for an object that we haven't loaded/parsed yet. |
| 45 | * |
| 46 | * When parsing a commit to create an in-core commit object, its |
| 47 | * parents list holds commit objects that represent its parents, but |
| 48 | * they are expected to be lazily initialized and do not know what |
| 49 | * their trees or parents are yet. When this function returns such a |
| 50 | * half-initialised objects, the caller is expected to initialize them |
| 51 | * by calling parse_object() on them. |
| 52 | */ |
Jason McMullan | 5d6ccf5 | 2005-06-03 11:05:39 -0400 | [diff] [blame] | 53 | struct object *lookup_object(const unsigned char *sha1); |
Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 54 | |
Linus Torvalds | 100c5f3 | 2007-04-16 22:11:43 -0700 | [diff] [blame] | 55 | extern void *create_object(const unsigned char *sha1, int type, void *obj); |
Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 56 | |
Daniel Barkalow | e9eefa6 | 2005-04-28 07:46:33 -0700 | [diff] [blame] | 57 | /** Returns the object, having parsed it to find out what it is. **/ |
Jason McMullan | 5d6ccf5 | 2005-06-03 11:05:39 -0400 | [diff] [blame] | 58 | struct object *parse_object(const unsigned char *sha1); |
Daniel Barkalow | e9eefa6 | 2005-04-28 07:46:33 -0700 | [diff] [blame] | 59 | |
Junio C Hamano | 9f613dd | 2006-09-15 13:30:02 -0700 | [diff] [blame] | 60 | /* Given the result of read_sha1_file(), returns the object after |
| 61 | * parsing it. eaten_p indicates if the object has a borrowed copy |
| 62 | * of buffer and the caller should not free() it. |
| 63 | */ |
Nicolas Pitre | 21666f1 | 2007-02-26 14:55:59 -0500 | [diff] [blame] | 64 | struct object *parse_object_buffer(const unsigned char *sha1, enum object_type type, unsigned long size, void *buffer, int *eaten_p); |
Junio C Hamano | 9f613dd | 2006-09-15 13:30:02 -0700 | [diff] [blame] | 65 | |
barkalow@iabervon.org | 66e481b | 2005-08-02 19:45:48 -0400 | [diff] [blame] | 66 | /** Returns the object, with potentially excess memory allocated. **/ |
| 67 | struct object *lookup_unknown_object(const unsigned char *sha1); |
| 68 | |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 69 | struct object_list *object_list_insert(struct object *item, |
barkalow@iabervon.org | 66e481b | 2005-08-02 19:45:48 -0400 | [diff] [blame] | 70 | struct object_list **list_p); |
| 71 | |
barkalow@iabervon.org | 66e481b | 2005-08-02 19:45:48 -0400 | [diff] [blame] | 72 | int object_list_contains(struct object_list *list, struct object *obj); |
| 73 | |
Linus Torvalds | 1f1e895 | 2006-06-19 17:42:35 -0700 | [diff] [blame] | 74 | /* Object array handling .. */ |
| 75 | void add_object_array(struct object *obj, const char *name, struct object_array *array); |
Martin Koegler | e5709a4 | 2007-04-22 18:43:58 +0200 | [diff] [blame] | 76 | void add_object_array_with_mode(struct object *obj, const char *name, struct object_array *array, unsigned mode); |
Junio C Hamano | b2a6d1c | 2009-01-17 22:27:08 -0800 | [diff] [blame] | 77 | void object_array_remove_duplicates(struct object_array *); |
Linus Torvalds | 1f1e895 | 2006-06-19 17:42:35 -0700 | [diff] [blame] | 78 | |
Heiko Voigt | bcc0a3e | 2012-03-29 09:21:21 +0200 | [diff] [blame] | 79 | void clear_object_flags(unsigned flags); |
| 80 | |
Daniel Barkalow | 6eb8ae0 | 2005-04-18 11:39:48 -0700 | [diff] [blame] | 81 | #endif /* OBJECT_H */ |