Main Page | Modules | Data Structures | File List | Data Fields | Related Pages

Packages file


Modules

Parser

Data Structures

struct  di_packages
 Packages file. More...

struct  di_packages_allocator
 Packages file - Allocator. More...


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)

Function Documentation

di_packages* di_packages_alloc void   ) 
 

Allocate di_packages

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

di_packages_allocator* di_packages_allocator_alloc void   ) 
 

Allocate di_packages_allocator

00051 {
00052   di_packages_allocator *ret;
00053 
00054   ret = internal_di_packages_allocator_alloc ();
00055   ret->package_mem_chunk = di_mem_chunk_new (sizeof (di_package), 16384);
00056 
00057   return ret;
00058 }

void di_packages_allocator_free di_packages_allocator allocator  ) 
 

Free di_packages_allocator

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

void di_packages_append_package di_packages packages,
di_package package,
di_packages_allocator allocator
 

append a package.

Parameters:
packages a di_packages

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

void di_packages_free di_packages packages  ) 
 

Free di_packages

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

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

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

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

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

di_packages_allocator* internal_di_packages_allocator_alloc void   ) 
 

For internal use only.

Partially allocate di_packages_allocator

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


Generated on Fri Feb 6 14:26:37 2004 for libdebian-installer by doxygen 1.3.5