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_dependency * | di_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_packages * | di_packages_alloc (void) |
void | di_packages_free (di_packages *packages) |
di_packages_allocator * | di_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_package * | di_packages_get_package (di_packages *packages, const char *name, size_t n) |
di_package * | di_packages_get_package_new (di_packages *packages, di_packages_allocator *allocator, char *name, size_t n) |
di_slist * | di_packages_resolve_dependencies (di_packages *packages, di_slist *list, di_packages_allocator *allocator) |
di_slist * | di_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_allocator * | internal_di_packages_allocator_alloc (void) |
di_slist * | di_packages_resolve_dependencies_special (di_packages *packages, di_slist *list, di_packages_resolve_dependencies_check *s, di_packages_allocator *allocator) |
di_slist * | di_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 |
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 | ) |
Allocate di_packages_allocator
References di_mem_chunk_new(), internal_di_packages_allocator_alloc(), and di_packages_allocator::package_mem_chunk.
00052 { 00053 di_packages_allocator *ret; 00054 00055 ret = internal_di_packages_allocator_alloc (); 00056 ret->package_mem_chunk = di_mem_chunk_new (sizeof (di_package), 16384); 00057 00058 return ret; 00059 }
void di_packages_allocator_free | ( | di_packages_allocator * | 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.
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.
packages | a di_packages | |
name | the name of the package | |
n | size of the name or 0 |
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.
packages | a di_packages | |
name | the name of the package | |
n | size of the name |
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 }