Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: v1.4.3.4
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 84 lines (61 sloc) 2.155 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
#ifndef OBJECT_H
#define OBJECT_H

struct object_list {
struct object *item;
struct object_list *next;
};

struct object_refs {
unsigned count;
struct object *base;
struct object *ref[FLEX_ARRAY]; /* more */
};

struct object_array {
unsigned int nr;
unsigned int alloc;
struct object_array_entry {
struct object *item;
const char *name;
} *objects;
};

#define TYPE_BITS 3
#define FLAG_BITS 27

/*
* The object type is stored in 3 bits.
*/
struct object {
unsigned parsed : 1;
unsigned used : 1;
unsigned type : TYPE_BITS;
unsigned flags : FLAG_BITS;
unsigned char sha1[20];
};

extern int track_object_refs;
extern const char *type_names[9];

extern unsigned int get_max_object_index(void);
extern struct object *get_indexed_object(unsigned int);

static inline const char *typename(unsigned int type)
{
return type_names[type > OBJ_BAD ? OBJ_BAD : type];
}

extern struct object_refs *lookup_object_refs(struct object *);

/** Internal only **/
struct object *lookup_object(const unsigned char *sha1);

/** Returns the object, having looked it up as being the given type. **/
struct object *lookup_object_type(const unsigned char *sha1, const char *type);

void created_object(const unsigned char *sha1, struct object *obj);

/** Returns the object, having parsed it to find out what it is. **/
struct object *parse_object(const unsigned char *sha1);

/** Returns the object, with potentially excess memory allocated. **/
struct object *lookup_unknown_object(const unsigned char *sha1);

struct object_refs *alloc_object_refs(unsigned count);
void set_object_refs(struct object *obj, struct object_refs *refs);

void mark_reachable(struct object *obj, unsigned int mask);

struct object_list *object_list_insert(struct object *item,
struct object_list **list_p);

void object_list_append(struct object *item,
struct object_list **list_p);

unsigned object_list_length(struct object_list *list);

int object_list_contains(struct object_list *list, struct object *obj);

/* Object array handling .. */
void add_object_array(struct object *obj, const char *name, struct object_array *array);

#endif /* OBJECT_H */
Something went wrong with that request. Please try again.