File: nrutil.cpp

package info (click to toggle)
mmseqs2 14-7e284%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 32,516 kB
  • sloc: cpp: 68,239; ansic: 6,548; sh: 2,631; makefile: 84; perl: 32
file content (97 lines) | stat: -rw-r--r-- 2,520 bytes parent folder | download | duplicates (4)
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
// Public domain code from Yi-Kuo Yu & Stephen Altschul, NCBI

//#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>

void nrerror(const char *error_text) {

    fprintf(stderr, "Numerical Recipes run-time error...\n");
    fprintf(stderr, "%s\n", error_text);
    fprintf(stderr, "...now exiting to system...\n");
    exit(1);
}

float *vector(int nl, int nh) {
    float *v;

    v = (float *) malloc((unsigned) (nh - nl + 1) * sizeof(float));
    if (!v) nrerror("allocation failure in vector()");
    return v - nl;
}

int *ivector(int nl, int nh) {
    int *v;

    v = (int *) malloc((unsigned) (nh - nl + 1) * sizeof(int));
    if (!v) nrerror("allocation failure in ivector()");
    return v - nl;
}

double *dvector(int nl, int nh) {
    double *v;

    v = (double *) malloc((unsigned) (nh - nl + 1) * sizeof(double));
    if (!v) nrerror("allocation failure in dvector()");
    return v - nl;
}

float **matrix(int nrl, int nrh, int ncl, int nch) {
    int i;
    float **m;

    m = (float **) malloc((unsigned) (nrh - nrl + 1) * sizeof(float *));
    if (!m) nrerror("allocation failure 1 in matrix()");
    m -= nrl;

    for (i = nrl; i <= nrh; i++) {
        m[i] = (float *) malloc((unsigned) (nch - ncl + 1) * sizeof(float));
        if (!m[i]) nrerror("allocation failure 2 in matrix()");
        m[i] -= ncl;
    }
    return m;
}

double **dmatrix(int nrl, int nrh, int ncl, int nch) {
    int i;
    double **m;

    m = (double **) malloc((unsigned) (nrh - nrl + 1) * sizeof(double *));
    if (!m) nrerror("allocation failure 1 in dmatrix()");
    m -= nrl;

    for (i = nrl; i <= nrh; i++) {
        m[i] = (double *) malloc((unsigned) (nch - ncl + 1) * sizeof(double));
        if (!m[i]) nrerror("allocation failure 2 in dmatrix()");
        m[i] -= ncl;
    }
    return m;
}

float **submatrix(float **a, int oldrl, int oldrh, int oldcl, int oldch, int newrl, int newcl) {
    int i, j;
    float **m;

    m = (float **) malloc((unsigned) (oldrh - oldrl + 1) * sizeof(float *));
    if (!m) nrerror("allocation failure in submatrix()");
    m -= newrl;

    for (i = oldrl, j = newrl; i <= oldrh; i++, j++) m[j] = a[i] + oldcl - newcl;

    return m;
}

void free_ivector(int *v, int nl, int nh) {
    free((char *) (v + nl));
}

void free_dvector(double *v, int nl, int nh) {
    free((char *) (v + nl));
}

void free_dmatrix(double **m, int nrl, int nrh, int ncl, int nch) {
    int i;

    for (i = nrh; i >= nrl; i--) free((char *) (m[i] + ncl));
    free((char *) (m + nrl));
}