Blame src/commit_list.h

Packit ae9e2a
/*
Packit ae9e2a
 * Copyright (C) the libgit2 contributors. All rights reserved.
Packit ae9e2a
 *
Packit ae9e2a
 * This file is part of libgit2, distributed under the GNU GPL v2 with
Packit ae9e2a
 * a Linking Exception. For full terms see the included COPYING file.
Packit ae9e2a
 */
Packit ae9e2a
#ifndef INCLUDE_commit_list_h__
Packit ae9e2a
#define INCLUDE_commit_list_h__
Packit ae9e2a
Packit ae9e2a
#include "git2/oid.h"
Packit ae9e2a
Packit ae9e2a
#define PARENT1  (1 << 0)
Packit ae9e2a
#define PARENT2  (1 << 1)
Packit ae9e2a
#define RESULT   (1 << 2)
Packit ae9e2a
#define STALE    (1 << 3)
Packit ae9e2a
#define ALL_FLAGS (PARENT1 | PARENT2 | STALE | RESULT)
Packit ae9e2a
Packit ae9e2a
#define PARENTS_PER_COMMIT	2
Packit ae9e2a
#define COMMIT_ALLOC \
Packit ae9e2a
	(sizeof(git_commit_list_node) + PARENTS_PER_COMMIT * sizeof(git_commit_list_node *))
Packit ae9e2a
Packit ae9e2a
#define FLAG_BITS 4
Packit ae9e2a
Packit ae9e2a
typedef struct git_commit_list_node {
Packit ae9e2a
	git_oid oid;
Packit ae9e2a
	int64_t time;
Packit ae9e2a
	unsigned int seen:1,
Packit ae9e2a
			 uninteresting:1,
Packit ae9e2a
			 topo_delay:1,
Packit ae9e2a
			 parsed:1,
Packit ae9e2a
			 added:1,
Packit ae9e2a
			 flags : FLAG_BITS;
Packit ae9e2a
Packit ae9e2a
	unsigned short in_degree;
Packit ae9e2a
	unsigned short out_degree;
Packit ae9e2a
Packit ae9e2a
	struct git_commit_list_node **parents;
Packit ae9e2a
} git_commit_list_node;
Packit ae9e2a
Packit ae9e2a
typedef struct git_commit_list {
Packit ae9e2a
	git_commit_list_node *item;
Packit ae9e2a
	struct git_commit_list *next;
Packit ae9e2a
} git_commit_list;
Packit ae9e2a
Packit ae9e2a
git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
Packit ae9e2a
int git_commit_list_time_cmp(const void *a, const void *b);
Packit ae9e2a
void git_commit_list_free(git_commit_list **list_p);
Packit ae9e2a
git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
Packit ae9e2a
git_commit_list *git_commit_list_insert_by_date(git_commit_list_node *item, git_commit_list **list_p);
Packit ae9e2a
int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit);
Packit ae9e2a
git_commit_list_node *git_commit_list_pop(git_commit_list **stack);
Packit ae9e2a
Packit ae9e2a
#endif