eccLib 1.1.0
Python library for bioinformatics written in C
Loading...
Searching...
No Matches
fasta.h
Go to the documentation of this file.
1
8#ifndef FASTA_H
9#define FASTA_H
10
11#include <limits.h>
12#include <stdbool.h>
13#include <stdint.h>
14#include <stdlib.h>
15
27#define firstEl(b) (b & 0x0F) // first 4 bits
28
35#define secondEl(b) (b & 0xF0) >> 4 // second 4 bits
36
44#define toByte(a, b) (uint8_t)a | (b << 4)
45
46typedef uint64_t packing_t;
47
48#define PACKING_WIDTH sizeof(packing_t) * 2
49
50#define ROUND_NUM 7
51
52#define PACKING_ROUND(packed_size) (((packed_size) + ROUND_NUM) & ~ROUND_NUM)
53
60static inline void pack(uint8_t values[PACKING_WIDTH], packing_t *packed) {
61 *packed = values[0];
62 for (uint8_t i = 1; i < PACKING_WIDTH; i++) {
63 *packed |= (packing_t)(values[i]) << (i * 4);
64 }
65}
66
72#define i_Index 0xFF // invalid FASTA index
73
79extern uint8_t fasta_binary_mapping[CHAR_MAX + 1];
80
88bool is_valid_title(const char *title, size_t len);
89
98char getIUPACchar(uint8_t index, bool rna);
99
105
106#endif
uint64_t packing_t
Definition fasta.h:46
#define PACKING_WIDTH
Definition fasta.h:48
uint8_t fasta_binary_mapping[CHAR_MAX+1]
A lookup table mapping FASTA characters to binary values.
Definition fasta.c:12
static void pack(uint8_t values[PACKING_WIDTH], packing_t *packed)
Packs an array of 4-bit values into an integer.
Definition fasta.h:60
char getIUPACchar(uint8_t index, bool rna)
Returns IUPAC FASTA character.
Definition fasta.c:42
bool is_valid_title(const char *title, size_t len)
Checks if a FASTA title is valid.
Definition fasta.c:50
void initialize_fasta_binary_mapping()
Initializes the FASTA binary mapping.
Definition fasta.c:14