Packages file

Data Structures

struct  di_packages
 Packages file. More...
struct  di_packages_allocator
 Packages file - Allocator. More...
struct  di_packages_resolve_dependencies_check
struct  di_packages_resolve_dependencies_do_real_list_append_data

Modules

 Parser

Typedefs

typedef bool di_packages_resolve_dependencies_check_package (di_packages_resolve_dependencies_check *r, di_package *package, di_package_dependency *d)
typedef di_package_dependencydi_packages_resolve_dependencies_check_provide (di_package *package, di_package_dependency *best, di_package_dependency *d, void *data)
typedef void di_packages_resolve_dependencies_do_package (di_package *package, void *data)

Functions

di_packagesdi_packages_alloc (void)
void di_packages_free (di_packages *packages)
di_packages_allocatordi_packages_allocator_alloc (void)
void di_packages_allocator_free (di_packages_allocator *packages)
void di_packages_append_package (di_packages *packages, di_package *package, di_packages_allocator *allocator)
di_packagedi_packages_get_package (di_packages *packages, const char *name, size_t n)
di_packagedi_packages_get_package_new (di_packages *packages, di_packages_allocator *allocator, char *name, size_t n)
di_slistdi_packages_resolve_dependencies (di_packages *packages, di_slist *list, di_packages_allocator *allocator)
di_slistdi_packages_resolve_dependencies_array (di_packages *packages, di_package **array, di_packages_allocator *allocator)
void di_packages_resolve_dependencies_mark (di_packages *packages)
di_packages_allocatorinternal_di_packages_allocator_alloc (void)
di_slistdi_packages_resolve_dependencies_special (di_packages *packages, di_slist *list, di_packages_resolve_dependencies_check *s, di_packages_allocator *allocator)
di_slistdi_packages_resolve_dependencies_array_special (di_packages *packages, di_package **array, di_packages_resolve_dependencies_check *s, di_packages_allocator *allocator)
void di_packages_resolve_dependencies_mark_special (di_packages *packages, di_packages_resolve_dependencies_check *s)
void di_packages_resolve_dependencies_marker (di_packages *packages)
bool di_packages_resolve_dependencies_recurse (di_packages_resolve_dependencies_check *r, di_package *package, di_package *dependend_package)

Variables

di_packages_resolve_dependencies_check_package di_packages_resolve_dependencies_check_real
di_packages_resolve_dependencies_check_package di_packages_resolve_dependencies_check_non_existant
di_packages_resolve_dependencies_check_package di_packages_resolve_dependencies_check_non_existant_quiet
di_packages_resolve_dependencies_check_package di_packages_resolve_dependencies_check_non_existant_permissive
di_packages_resolve_dependencies_check_provide di_packages_resolve_dependencies_check_virtual
di_packages_resolve_dependencies_do_package di_packages_resolve_dependencies_do_real_list_append
di_packages_resolve_dependencies_do_package di_packages_resolve_dependencies_do_real_mark

Function Documentation

di_packages* di_packages_alloc ( void   ) 

Allocate di_packages

References di_hash_table_new_full(), di_new0, internal_di_package_destroy_func, and table.

00039 {
00040   di_packages *ret;
00041 
00042   ret = di_new0 (di_packages, 1);
00043   ret->table = di_hash_table_new_full (di_rstring_hash, di_rstring_equal, NULL, internal_di_package_destroy_func);
00044 
00045   return ret;
00046 }

di_packages_allocator* di_packages_allocator_alloc ( void   ) 
void di_packages_allocator_free ( di_packages_allocator allocator  ) 

Free di_packages_allocator

References di_free(), di_packages_allocator::package_dependency_mem_chunk, di_packages_allocator::package_mem_chunk, and di_packages_allocator::slist_node_mem_chunk.

00091 {
00092   di_mem_chunk_destroy (allocator->package_mem_chunk);
00093   di_mem_chunk_destroy (allocator->package_dependency_mem_chunk);
00094   di_mem_chunk_destroy (allocator->slist_node_mem_chunk);
00095   di_free (allocator);
00096 }

void di_packages_append_package ( di_packages packages,
di_package package,
di_packages_allocator allocator 
)

append a package.

Parameters:
packages a di_packages

References di_hash_table_insert(), di_packages_get_package(), di_slist_append_chunk(), di_package::key, list, di_package::package, di_packages_allocator::slist_node_mem_chunk, and table.

00104 {
00105   di_package *tmp;
00106 
00107   tmp = di_packages_get_package (packages, package->package, 0);
00108 
00109   if (!tmp)
00110     di_slist_append_chunk (&packages->list, package, allocator->slist_node_mem_chunk);
00111 
00112   di_hash_table_insert (packages->table, &package->key, package);
00113 }

void di_packages_free ( di_packages packages  ) 

Free di_packages

References di_free(), di_hash_table_destroy(), and table.

00080 {
00081   if (!packages)
00082     return;
00083   di_hash_table_destroy (packages->table);
00084   di_free (packages);
00085 }

di_package* di_packages_get_package ( di_packages packages,
const char *  name,
size_t  n 
)

get a named package.

Parameters:
packages a di_packages
name the name of the package
n size of the name or 0
Returns:
the package or NULL

References di_hash_table_lookup(), di_rstring::size, di_rstring::string, and table.

Referenced by di_packages_append_package(), and di_packages_get_package_new().

00125 {
00126   di_rstring key;
00127   size_t size;
00128 
00129   if (n)
00130     size = n;
00131   else
00132     size = strlen (name);
00133 
00134   /* i know that is bad, but i know it is not written by the lookup */
00135   key.string = (char *) name;
00136   key.size = size;
00137 
00138   return di_hash_table_lookup (packages->table, &key);
00139 }

di_package* di_packages_get_package_new ( di_packages packages,
di_packages_allocator allocator,
char *  name,
size_t  n 
)

get a named package. creates a new one if non-existant.

Parameters:
packages a di_packages
name the name of the package
n size of the name
Returns:
the package

References di_hash_table_insert(), di_packages_get_package(), di_stradup(), di_package::key, di_rstring::size, di_rstring::string, and table.

00152 {
00153   di_package *ret = di_packages_get_package (packages, name, n);
00154 
00155   if (!ret)
00156   {
00157     ret = di_package_alloc (allocator);
00158     ret->key.string = di_stradup (name, n);
00159     ret->key.size = n;
00160 
00161     di_hash_table_insert (packages->table, &ret->key, ret);
00162   }
00163 
00164   return ret;
00165 }

di_packages_allocator* internal_di_packages_allocator_alloc ( void   ) 

For internal use only.

Partially allocate di_packages_allocator

References di_mem_chunk_new(), di_new0, di_packages_allocator::package_dependency_mem_chunk, and di_packages_allocator::slist_node_mem_chunk.

Referenced by di_packages_allocator_alloc().

00066 {
00067   di_packages_allocator *ret;
00068 
00069   ret = di_new0 (di_packages_allocator, 1);
00070   ret->package_dependency_mem_chunk = di_mem_chunk_new (sizeof (di_package_dependency), 4096);
00071   ret->slist_node_mem_chunk = di_mem_chunk_new (sizeof (di_slist_node), 4096);
00072 
00073   return ret;
00074 }

Generated on Tue Apr 13 12:07:06 2010 for libdebian-installer by  doxygen 1.6.3