File: bwCommon.h

package info (click to toggle)
libbigwig 0.4.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 460 kB
  • sloc: ansic: 3,591; makefile: 79; python: 58
file content (70 lines) | stat: -rw-r--r-- 2,910 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*! \file bwCommon.h
 *
 * You have no reason to use these functions. They may change without warning because there's no reason for them to be used outside of libBigWig's internals.
 *
 * These are structures and functions from a variety of files that are used across files internally but don't need to be see by libBigWig users.
 */

/*!
 * @brief Like fsetpos, but for local or remote bigWig files.
 * This will set the file position indicator to the specified point. For local files this literally is `fsetpos`, while for remote files it fills a memory buffer with data starting at the desired position.
 * @param fp A valid opened bigWigFile_t.
 * @param pos The position within the file to seek to.
 * @return 0 on success and -1 on error.
 */
int bwSetPos(bigWigFile_t *fp, size_t pos);

/*!
 * @brief A local/remote version of `fread`.
 * Reads data from either local or remote bigWig files.
 * @param data An allocated memory block big enough to hold the data.
 * @param sz The size of each member that should be copied.
 * @param nmemb The number of members to copy.
 * @param fp The bigWigFile_t * from which to copy the data.
 * @see bwSetPos
 * @return For nmemb==1, the size of the copied data. For nmemb>1, the number of members fully copied (this is equivalent to `fread`).
 */
size_t bwRead(void *data, size_t sz, size_t nmemb, bigWigFile_t *fp);

/*!
 * @brief Determine what the file position indicator say.
 * This is equivalent to `ftell` for local or remote files.
 * @param fp The file.
 * @return The position in the file.
 */
long bwTell(bigWigFile_t *fp);

/*!
 * @brief Reads a data index (either full data or a zoom level) from a bigWig file.
 * There is little reason for end users to use this function. This must be freed with `bwDestroyIndex`
 * @param fp A valid bigWigFile_t pointer
 * @param offset The file offset where the index begins
 * @return A bwRTree_t pointer or NULL on error.
 */
bwRTree_t *bwReadIndex(bigWigFile_t *fp, uint64_t offset);

/*!
 * @brief Destroy an bwRTreeNode_t and all of its children.
 * @param node The node to destroy.
 */
void bwDestroyIndexNode(bwRTreeNode_t *node);

/*!
 * @brief Frees space allocated by `bwReadIndex`
 * There is generally little reason to use this, since end users should typically not need to run `bwReadIndex` themselves.
 * @param idx A bwRTree_t pointer allocated by `bwReadIndex`.
 */
void bwDestroyIndex(bwRTree_t *idx);

/// @cond SKIP
bwOverlapBlock_t *walkRTreeNodes(bigWigFile_t *bw, bwRTreeNode_t *root, uint32_t tid, uint32_t start, uint32_t end);
void destroyBWOverlapBlock(bwOverlapBlock_t *b);
/// @endcond

/*!
 * @brief Finishes what's needed to write a bigWigFile
 * Flushes the buffer, converts the index linked list to a tree, writes that to disk, handles zoom level stuff, writes magic at the end
 * @param fp A valid bigWigFile_t pointer
 * @return 0 on success
 */
int bwFinalize(bigWigFile_t *fp);