#ifndef __VMAF_FEATURE_COLLECTOR_H__
#define __VMAF_FEATURE_COLLECTOR_H__
#include <pthread.h>
#include <stdbool.h>
#include <time.h>
#include "dict.h"
typedef struct {
char *name;
struct {
bool written;
double value;
} *score;
unsigned capacity;
} FeatureVector;
typedef struct {
struct {
char *name;
double value;
} *metric;
unsigned cnt, capacity;
} AggregateVector;
typedef struct VmafFeatureCollector {
FeatureVector **feature_vector;
AggregateVector aggregate_vector;
unsigned cnt, capacity;
struct { clock_t begin, end; } timer;
pthread_mutex_t lock;
} VmafFeatureCollector;
int vmaf_feature_collector_init(VmafFeatureCollector **const feature_collector);
int vmaf_feature_collector_append(VmafFeatureCollector *feature_collector,
const char *feature_name, double score,
unsigned index);
int vmaf_feature_collector_append_with_dict(VmafFeatureCollector *fc,
VmafDictionary *dict, const char *feature_name, double score,
unsigned index);
int vmaf_feature_collector_get_score(VmafFeatureCollector *feature_collector,
const char *feature_name, double *score,
unsigned index);
int vmaf_feature_collector_set_aggregate(VmafFeatureCollector *feature_collector,
const char *feature_name,
double score);
int vmaf_feature_collector_get_aggregate(VmafFeatureCollector *feature_collector,
const char *feature_name,
double *score);
void vmaf_feature_collector_destroy(VmafFeatureCollector *feature_collector);
#endif