/usr/lib/R/site-library/Biostrings/include/Biostrings_interface.h is in r-bioc-biostrings 2.30.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | /*****************************************************************************
Biostrings C interface: prototypes
----------------------------------
The Biostrings C interface is split in 2 files:
1. Biostrings_defines.h (in this directory): contains the typedefs and
defines of the interface.
2. Biostrings_interface.h (this file): contains the prototypes of the
Biostrings C routines that are part of the interface.
-----------------------------------------------------------------------------
This file contains the prototypes of a subset of Biostrings C routines that
can be called by C code from other packages. In order to use these routines
in your package, you need to do the following:
a. Add the IRanges, XVector, and Biostrings package to the 'LinkingTo:'
field of your DESCRIPTION file. It's very likely that you already have
some of them, if not all of them, listed in your 'Depends:' and/or
'Imports:' field. Also it's recommended that you have the methods package
in 'Imports:', preferably in first position.
b. If it doesn't already have one, add a NAMESPACE file to your package and
start it with the following lines:
useDynLib(mypackage) # replace mypackage by the name of your package
import(methods) # if you have it in your 'Imports:' field
import(IRanges) # if you need to import stuff from IRanges
import(XVector) # if you need to import stuff from XVector
import(Biostrings) # if you need to import stuff from Biostrings
c. Add a Biostrings_stubs.c file to your src/ folder with the following
line (and nothing else) in it:
#include "_Biostrings_stubs.c" // note the underscore!
If you also need to call C routines defined in XVector (e.g. cache_XRaw)
and/or IRanges (e.g. vector_memcpy), add an XVector_stubs.c and/or
IRanges_stubs.c file in a similar fashion.
d. Add the following line:
#include "Biostrings_interface.h"
in your .c files where you need to call Biostrings C routines.
Add similar lines for XVector_interface.h and/or IRanges_interface.h
in case you also need to call XVector and/or IRanges C routines.
Note that those includes should come after any R or system include so
the top of your .c file will typically look like this:
// R includes
#include <Rdefines.h>
#include <R_ext/Rdynload.h>
... maybe more R includes ...
// System includes
#include <stdio.h>
#include <stdlib.h>
... maybe more system includes ...
#include "XVector_interface.h"
#include "Biostrings_interface.h"
e. Any C routine defined in Biostrings_interface.h, XVector_interface.h, or
IRanges_interface.h can now be called in your .c file. For example, you
could write the following function:
SEXP print_XString_bytes(SEXP xstring)
{
cachedCharSeq x;
int i;
const char *x_char;
x = cache_XRaw(xstring);
for (i = 0, x_char = x.elts; i < x.nelt; i++, x_char++)
Rprintf("%x ", *x_char);
Rprintf("\n");
return R_NilValue;
}
to display the sequence of an XString object (in hexadecimal format).
Don't forget to register the print_XString_bytes() function if you want
to make it a .Call entry point!
f. 2 IMPORTANT THINGS TO REMEMBER ABOUT XString OBJECTS:
o They are NOT null-terminated like standard strings in C: they can
contain the null byte so you should never use the C standard string
functions on them;
o DNAString and RNAString objects have their data ENCODED: for
example, if you can assume that the 'xstring' argument in the above
code will always point to a DNAString instance, then you could replace
Rprintf("%x ", *x_char);
by
Rprintf("%x(%c) ", *x_char, DNAdecode(*x_char));
Of course this code would work properly only if 'xstring' is actually
a DNAString instance!
Please consult the "System and foreign language interfaces" section in the
Writing R Extensions manual for more information:
http://cran.r-project.org/doc/manuals/R-exts.html
Don't hesitate to ask on the bioc-devel mailing list for questions or
suggestions about this:
http://bioconductor.org/help/mailing-list/
Thanks for using the Biostrings package!
*****************************************************************************/
#include "Biostrings_defines.h"
/*
* Low-level manipulation of XString and XStringSet objects.
*/
char DNAencode(char c);
char DNAdecode(char code);
char RNAencode(char c);
char RNAdecode(char code);
int get_XStringSet_length(SEXP x);
const char *get_XStringSet_xsbaseclassname(SEXP x);
cachedXStringSet cache_XStringSet(SEXP x);
int get_cachedXStringSet_length(const cachedXStringSet *cached_x);
cachedCharSeq get_cachedXStringSet_elt(
const cachedXStringSet *cached_x,
int i
);
void set_XStringSet_names(
SEXP x,
SEXP names
);
/*
* Match reporting facilities.
*/
void init_match_reporting(const char *ms_mode, int nPSpair);
void set_active_PSpair(int PSpair_id);
void set_match_shift(int shift);
void report_match(int start, int width);
void drop_reported_matches();
int get_match_count();
SEXP reported_matches_asSEXP();
/*
* MIndex abstract accessor functions.
*/
cachedMIndex cache_MIndex(SEXP x);
int get_cachedMIndex_length(const cachedMIndex *cached_x);
int get_cachedMIndex_elt_width0(const cachedMIndex *cached_x, int i);
cachedIRanges get_cachedMIndex_elt(const cachedMIndex *cached_x, int i);
/*
* A BOYER-MOORE-LIKE MATCHING ALGO
*/
int match_pattern_boyermoore(
const cachedCharSeq *P,
const cachedCharSeq *S,
int nfirstmatches,
int walk_backward
);
|