2026-05-27 20:42:59 +08:00
|
|
|
|
/*
|
|
|
|
|
|
Description: 排序过程的第二阶段
|
|
|
|
|
|
* 第二阶段(phase-2):
|
|
|
|
|
|
* 1. 打开所有中间文件,并关联上解压线程池
|
|
|
|
|
|
* 2. phase-2-stage-1:解压中间文件,并进行归并排序,放入buf
|
|
|
|
|
|
* 3. phase-2-stage-2:多线程进行压缩,放入buf
|
|
|
|
|
|
* 4. phase-2-stage-3:将buf写入最终的bam文件
|
|
|
|
|
|
* 5. 要注意计算index并写入index文件
|
|
|
|
|
|
Copyright : All right reserved by ICT
|
|
|
|
|
|
|
|
|
|
|
|
Author : Zhang Zhonghai
|
|
|
|
|
|
Date : 2026/02/08
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2026-06-03 14:09:51 +08:00
|
|
|
|
#pragma once
|
2026-06-03 16:47:46 +08:00
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
2026-06-03 14:09:51 +08:00
|
|
|
|
|
|
|
|
|
|
struct Phase2File {
|
|
|
|
|
|
FILE* fp;
|
|
|
|
|
|
// 双buffer
|
|
|
|
|
|
// 当前读入的buffer指针df
|
|
|
|
|
|
// ReadBuffer
|
|
|
|
|
|
|
2026-06-03 16:47:46 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 循环缓冲区
|
|
|
|
|
|
struct CircularBuffer {
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 循环数组
|
|
|
|
|
|
struct CircularArray {
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/* 第二阶段的多线程流水线参数 */
|
|
|
|
|
|
struct Phase2PipelineArg {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void phase2Pipeline(Phase2PipelineArg &p);
|