<commit_before>#ifndef ARBITER_DEPENDENCY_H
#define ARBITER_DEPENDENCY_H

#ifdef __cplusplus
extern "C" {
#endif

#include <arbiter/Requirement.h>

typedef struct ArbiterProjectIdentifier ArbiterProjectIdentifier;

ArbiterProjectIdentifier *ArbiterCreateProjectIdentifier (ArbiterUserValue value);
const void *ArbiterProjectIdentifierValue (const ArbiterProjectIdentifier *projectIdentifier);
void ArbiterFreeProjectIdentifier (ArbiterProjectIdentifier *projectIdentifier);

typedef struct ArbiterDependency ArbiterDependency;

ArbiterDependency *ArbiterCreateDependency (const ArbiterProjectIdentifier *projectIdentifier, const ArbiterRequirement *requirement);
const ArbiterProjectIdentifier *ArbiterDependencyProject (const ArbiterDependency *dependency);
const ArbiterRequirement *ArbiterDependencyRequirement (const ArbiterDependency *dependency);
void ArbiterFreeDependency (ArbiterDependency *dependency);

typedef struct ArbiterDependencyList ArbiterDependencyList;

ArbiterDependencyList *ArbiterCreateDependencyList (const ArbiterDependency *dependencies, size_t count);
void ArbiterFreeDependencyList (ArbiterDependencyList *dependencyList);

#ifdef __cplusplus
}
#endif

#endif<commit_msg>Document Dependency interface<commit_after>#ifndef ARBITER_DEPENDENCY_H
#define ARBITER_DEPENDENCY_H

#ifdef __cplusplus
extern "C" {
#endif

#include <arbiter/Requirement.h>

/**
 * An opaque value which identifies a project participating in dependency
 * resolution.
 */
typedef struct ArbiterProjectIdentifier ArbiterProjectIdentifier;

/**
 * Creates a project identifier from the given opaque data.
 *
 * The returned identifier must be freed with ArbiterFreeProjectIdentifier().
 */
ArbiterProjectIdentifier *ArbiterCreateProjectIdentifier (ArbiterUserValue value);

/**
 * Returns the opaque data which was provided to ArbiterCreateProjectIdentifier().
 *
 * The returned pointer is only guaranteed to remain valid for the current
 * scope.
 */
const void *ArbiterProjectIdentifierValue (const ArbiterProjectIdentifier *projectIdentifier);

/**
 * Releases the memory associated with a project identifier.
 */
void ArbiterFreeProjectIdentifier (ArbiterProjectIdentifier *projectIdentifier);

/**
 * Represents a dependency specification, which consists of a project identifier
 * and a version requirement.
 */
typedef struct ArbiterDependency ArbiterDependency;

/**
 * Creates a dependency which specifies a version requirement of the given
 * project.
 *
 * The returned dependency must be freed with ArbiterFreeDependency().
 */
ArbiterDependency *ArbiterCreateDependency (const ArbiterProjectIdentifier *projectIdentifier, const ArbiterRequirement *requirement);

/**
 * Returns the project identified by this dependency. 
 *
 * The returned pointer is only guaranteed to remain valid for the current
 * scope.
 */
const ArbiterProjectIdentifier *ArbiterDependencyProject (const ArbiterDependency *dependency);

/**
 * Returns the version requirement of this dependency. 
 *
 * The returned pointer is only guaranteed to remain valid for the current
 * scope.
 */
const ArbiterRequirement *ArbiterDependencyRequirement (const ArbiterDependency *dependency);

/**
 * Releases the memory associated with a dependency object.
 */
void ArbiterFreeDependency (ArbiterDependency *dependency);

/**
 * Represents a list of dependencies.
 */
typedef struct ArbiterDependencyList ArbiterDependencyList;

/**
 * Creates a dependency list which wraps a C array of ArbiterDependency objects.
 */
ArbiterDependencyList *ArbiterCreateDependencyList (const ArbiterDependency *dependencies, size_t count);

/**
 * Releases the memory associated with a dependency list.
 */
void ArbiterFreeDependencyList (ArbiterDependencyList *dependencyList);

#ifdef __cplusplus
}
#endif

#endif
{'fraction_non_alphanumeric': 0.06458443620963472, 'fraction_numerical': 0.0, 'mean_word_length': 6.759753593429158, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3193402', 'n_tokens_mistral': 1002, 'n_tokens_neox': 964, 'n_words': 318}