move cluster table management from ec3_reader/writer to ec3_pipeline
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
#ifndef PIPELINE_H_
|
||||
#define PIPELINE_H_
|
||||
|
||||
#include "cluster.h"
|
||||
#include "status.h"
|
||||
|
||||
#include <blue/core/queue.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
|
||||
enum ec3_pipeline_stage_type_id {
|
||||
EC3_PIPELINE_NONE = 0,
|
||||
EC3_PIPELINE_AES256,
|
||||
EC3_PIPELINE_ZSTD,
|
||||
EC3_PIPELINE_FILE,
|
||||
};
|
||||
|
||||
enum ec3_pipeline_stage_type_flags {
|
||||
@@ -24,16 +25,19 @@ struct ec3_pipeline_stage_type {
|
||||
enum ec3_pipeline_stage_type_id t_id;
|
||||
enum ec3_pipeline_stage_type_flags t_flags;
|
||||
|
||||
enum ec3_status (*t_data_in)(
|
||||
struct ec3_pipeline_stage *,
|
||||
const void *,
|
||||
void *,
|
||||
size_t *);
|
||||
enum ec3_status (*t_data_out)(
|
||||
enum ec3_status (*t_cluster_in)(
|
||||
struct ec3_pipeline_stage *,
|
||||
const void *,
|
||||
size_t,
|
||||
void *,
|
||||
size_t,
|
||||
size_t *);
|
||||
enum ec3_status (*t_cluster_out)(
|
||||
struct ec3_pipeline_stage *,
|
||||
const void *,
|
||||
size_t,
|
||||
void *,
|
||||
size_t,
|
||||
size_t *);
|
||||
};
|
||||
|
||||
@@ -50,6 +54,17 @@ struct ec3_pipeline_stage_args {
|
||||
};
|
||||
|
||||
struct ec3_pipeline {
|
||||
FILE *p_target;
|
||||
size_t p_target_base_offset;
|
||||
|
||||
size_t p_cluster_size;
|
||||
unsigned int p_cluster_flags;
|
||||
struct cluster_table p_cluster_table;
|
||||
|
||||
size_t p_next_cluster_id;
|
||||
size_t p_data_offset;
|
||||
|
||||
void *p_read_buf;
|
||||
b_queue p_stages;
|
||||
};
|
||||
|
||||
@@ -57,22 +72,28 @@ extern enum ec3_status ec3_pipeline_create(
|
||||
struct ec3_pipeline_stage_args stages[],
|
||||
size_t nr_stages,
|
||||
size_t cluster_size,
|
||||
FILE *target,
|
||||
size_t target_base_offset,
|
||||
FILE *cluster_table,
|
||||
size_t cluster_table_base_offset,
|
||||
struct ec3_pipeline **out);
|
||||
extern void ec3_pipeline_destroy(struct ec3_pipeline *p);
|
||||
|
||||
extern enum ec3_status ec3_pipeline_data_out(
|
||||
extern enum ec3_status ec3_pipeline_write_cluster(
|
||||
struct ec3_pipeline *pipeline,
|
||||
void *p,
|
||||
size_t len,
|
||||
size_t *nr_written);
|
||||
extern enum ec3_status ec3_pipeline_data_in(
|
||||
size_t *bytes_written);
|
||||
extern enum ec3_status ec3_pipeline_read_cluster(
|
||||
struct ec3_pipeline *pipeline,
|
||||
void *p,
|
||||
size_t max,
|
||||
size_t cluster_id,
|
||||
size_t *nr_read);
|
||||
|
||||
extern size_t ec3_get_cluster_size(unsigned int v);
|
||||
extern enum ec3_pipeline_stage_id ec3_get_pipeline_stage_for_encryption_func(unsigned int func);
|
||||
extern enum ec3_pipeline_stage_id ec3_get_pipeline_stage_for_compression_func(unsigned int func);
|
||||
extern enum ec3_pipeline_stage_type_id
|
||||
ec3_get_pipeline_stage_for_encryption_func(unsigned int func);
|
||||
extern enum ec3_pipeline_stage_type_id
|
||||
ec3_get_pipeline_stage_for_compression_func(unsigned int func);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user