Data Structures | Modules | Typedefs | Functions | Variables

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.

{
  di_packages *ret;

  ret = di_new0 (di_packages, 1);
  ret->table = di_hash_table_new_full (di_rstring_hash, di_rstring_equal, NULL, internal_di_package_destroy_func);

  return ret;
}

di_packages_allocator* di_packages_allocator_alloc ( void   ) 
void di_packages_allocator_free ( di_packages_allocator allocator  ) 
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.

{
  di_package *tmp;

  tmp = di_packages_get_package (packages, package->package, 0);

  if (!tmp)
    di_slist_append_chunk (&packages->list, package, allocator->slist_node_mem_chunk);

  di_hash_table_insert (packages->table, &package->key, package);
}

void di_packages_free ( di_packages packages  ) 

Free di_packages

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

{
  if (!packages)
    return;
  di_hash_table_destroy (packages->table);
  di_free (packages);
}

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().

{
  di_rstring key;
  size_t size;

  if (n)
    size = n;
  else
    size = strlen (name);

  /* i know that is bad, but i know it is not written by the lookup */
  key.string = (char *) name;
  key.size = size;

  return di_hash_table_lookup (packages->table, &key);
}

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.

{
  di_package *ret = di_packages_get_package (packages, name, n);

  if (!ret)
  {
    ret = di_package_alloc (allocator);
    ret->key.string = di_stradup (name, n);
    ret->key.size = n;

    di_hash_table_insert (packages->table, &ret->key, ret);
  }

  return ret;
}

di_packages_allocator* internal_di_packages_allocator_alloc ( void   )