2009-11-18 02:42:52 +03:00
/*-*- Mode: C; c-basic-offset: 8 -*-*/
# ifndef foomanagerhfoo
# define foomanagerhfoo
# include <stdbool.h>
# include <inttypes.h>
2010-01-19 02:22:34 +03:00
# include <stdio.h>
2009-11-18 02:42:52 +03:00
typedef struct Manager Manager ;
# include "name.h"
# include "job.h"
# include "hashmap.h"
# include "list.h"
# include "set.h"
struct Manager {
uint32_t current_job_id ;
2010-01-19 01:50:13 +03:00
/* Note that the set of names we know of is allowed to be
* incosistent . However the subset of it that is loaded may
* not , and the list of jobs may neither . */
2009-11-18 02:42:52 +03:00
/* Active jobs and names */
Hashmap * names ; /* name string => Name object n:1 */
Hashmap * jobs ; /* job id => Job object 1:1 */
/* Names that need to be loaded */
LIST_HEAD ( Meta , load_queue ) ; /* this is actually more a stack than a queue, but uh. */
2010-01-20 04:12:51 +03:00
/* Jobs to be added */
Hashmap * transaction_jobs ; /* Name object => Job object list 1:1 */
JobDependency * transaction_anchor ;
2009-11-19 04:52:17 +03:00
bool dispatching_load_queue : 1 ;
2009-11-18 02:42:52 +03:00
} ;
Manager * manager_new ( void ) ;
void manager_free ( Manager * m ) ;
Job * manager_get_job ( Manager * m , uint32_t id ) ;
Name * manager_get_name ( Manager * m , const char * name ) ;
int manager_load_name ( Manager * m , const char * name , Name * * _ret ) ;
2010-01-20 04:12:51 +03:00
int manager_add_job ( Manager * m , JobType type , Name * name , JobMode mode , bool force , Job * * _ret ) ;
2009-11-18 02:42:52 +03:00
2010-01-20 06:02:39 +03:00
void manager_dump_names ( Manager * s , FILE * f , const char * prefix ) ;
void manager_dump_jobs ( Manager * s , FILE * f , const char * prefix ) ;
2010-01-19 02:22:34 +03:00
2010-01-20 04:12:51 +03:00
void manager_transaction_delete_job ( Manager * m , Job * j ) ;
2009-11-18 02:42:52 +03:00
# endif