File: waveform.c

package info (click to toggle)
ismrmrd 1.14.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,564 kB
  • sloc: cpp: 6,439; ansic: 2,276; xml: 1,025; sh: 187; python: 72; makefile: 42
file content (106 lines) | stat: -rw-r--r-- 2,603 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
98
99
100
101
102
103
104
105
106
//
// Created by dch on 28/02/18.
//
#include "ismrmrd/ismrmrd.h"
#include "ismrmrd/waveform.h"
#ifdef __cplusplus
#include <cstring>
#include <cstdlib>
#include <cstdio>
#else
/* C99 compiler */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ismrmrd/version.h>

#endif /* __cplusplus */

#ifdef __cplusplus
namespace ISMRMRD {
extern "C" {
#endif

int ismrmrd_make_consistent_waveform(ISMRMRD_Waveform *wav) {
    size_t data_size;

    data_size = ismrmrd_size_of_waveform_data(wav);

    if (data_size > 0) {
        uint32_t *newPtr = (uint32_t *) (realloc(wav->data, data_size));
        if (newPtr == NULL) {
            return ISMRMRD_PUSH_ERR(ISMRMRD_MEMORYERROR,
                                    "Failed to realloc acquisition data array");
        }
        wav->data = newPtr;
    }

    return ISMRMRD_NOERROR;
}

int ismrmrd_size_of_waveform_data(const ISMRMRD_Waveform *wav) {
    return wav->head.channels * wav->head.number_of_samples * sizeof(uint32_t);
}


ISMRMRD_Waveform *ismrmrd_create_waveform() {
    ISMRMRD_Waveform *wav = (ISMRMRD_Waveform *) malloc(sizeof(ISMRMRD_Waveform));
    if (wav == NULL) {
        ISMRMRD_PUSH_ERR(ISMRMRD_MEMORYERROR, "Failed to malloc new ISMRMRD_Waveform.");
        return NULL;
    }
    if (ismrmrd_init_waveform(wav) != ISMRMRD_NOERROR) {
        ISMRMRD_PUSH_ERR(ISMRMRD_RUNTIMEERROR, "Failed to initialize waveform.");
        return NULL;
    }
    return wav;
}

int ismrmrd_init_waveformheader(ISMRMRD_WaveformHeader *hdr) {
    memset(hdr, 0, sizeof(ISMRMRD_WaveformHeader));
    hdr->channels = 1;
    hdr->version = ISMRMRD_VERSION_MAJOR;
    return ISMRMRD_NOERROR;

}

int ismrmrd_init_waveform(ISMRMRD_Waveform *wav) {

    ismrmrd_init_waveformheader(&wav->head);
    wav->data = NULL;
    return ISMRMRD_NOERROR;

}

int ismrmrd_copy_waveform(ISMRMRD_Waveform *dest, const ISMRMRD_Waveform *src) {

    if (src == NULL) {
        return ISMRMRD_PUSH_ERR(ISMRMRD_RUNTIMEERROR, "Source pointer should not NULL.");
    }
    if (dest == NULL) {
        return ISMRMRD_PUSH_ERR(ISMRMRD_RUNTIMEERROR, "Destination pointer should not NULL.");
    }

    memcpy(&dest->head, &src->head, sizeof(ISMRMRD_WaveformHeader));
    ismrmrd_make_consistent_waveform(dest);

    memcpy(dest->data, src->data, ismrmrd_size_of_waveform_data(src));

    return ISMRMRD_NOERROR;

}

int ismrmrd_free_waveform(ISMRMRD_Waveform* wav) {
	if (wav == NULL) {
		return ISMRMRD_PUSH_ERR(ISMRMRD_RUNTIMEERROR, "Pointer should not be NULL.");
	}
	free(wav->data);
	free(wav);
	return ISMRMRD_NOERROR;

}

#ifdef __cplusplus
}
}
#endif