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
|
/*
* Copyright (C) 2000-2001 NCSA
* All rights reserved.
*
* Programmer: Raymond Lu <slu@ncsa.uiuc.edu>
* August 5, 2002
*
* Purpose: Compact dataset I/O functions. These routines are similar
* H5F_contig_* and H5F_istore_*.
*/
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
#include "H5private.h"
#include "H5Eprivate.h"
#include "H5Fpkg.h"
#include "H5Oprivate.h"
#include "H5FDprivate.h" /*file driver */
#include "H5FLprivate.h" /*Free Lists */
/* Interface initialization */
#define PABLO_MASK H5Fcompact_mask
static int interface_initialize_g = 0;
#define INTERFACE_INIT NULL
/*-------------------------------------------------------------------------
* Function: H5F_compact_readv
*
* Purpose: Reads some data vectors from a dataset into a buffer.
* The data is in compact dataset. The address is relative
* to the beginning address of the dataset. The offsets and
* sequence lengths are in bytes.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* August 5, 2002
*
* Notes:
* Offsets in the sequences must be monotonically increasing
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t
H5F_compact_readv(H5F_t UNUSED *f, const H5O_layout_t *layout, size_t nseq,
size_t size_arr[], hsize_t offset_arr[],
hid_t UNUSED dxpl_id, void *_buf/*out*/)
{
unsigned char *buf=(unsigned char *)_buf;
size_t size;
haddr_t offset;
unsigned u;
herr_t ret_value=SUCCEED;
FUNC_ENTER_NOAPI(H5F_compact_readv, FAIL);
for(u=0; u<nseq; u++) {
size=size_arr[u];
offset=offset_arr[u];
if(size > 0) {
HDmemcpy(buf, (unsigned char*)layout->buf+offset, size);
buf +=size;
}
}
done:
FUNC_LEAVE(ret_value);
} /* end H5F_compact_readv() */
/*-------------------------------------------------------------------------
* Function: H5F_compact_writev
*
* Purpose: Writes some data vectors from a dataset into a buffer.
* The data is in compact dataset. The address is relative
* to the beginning address for the file. The offsets and
* sequence lengths are in bytes. This function only copies
* data into the buffer in the LAYOUT struct and mark it
* as DIRTY. Later in H5D_close, the data is copied into
* header message in memory.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: Raymond Lu
* August 5, 2002
*
* Notes:
* Offsets in the sequences must be monotonically increasing
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t
H5F_compact_writev(H5F_t UNUSED *f, H5O_layout_t *layout, size_t nseq,
size_t size_arr[], hsize_t offset_arr[],
hid_t UNUSED dxpl_id, const void *_buf)
{
const unsigned char *buf=(const unsigned char *)_buf;
size_t size;
haddr_t offset;
unsigned u;
herr_t ret_value=SUCCEED;
FUNC_ENTER_NOAPI(H5F_compact_writev, FAIL);
for(u=0; u<nseq; u++) {
size=size_arr[u];
offset=offset_arr[u];
if(size > 0) {
HDmemcpy((unsigned char*)layout->buf+offset, buf, size);
buf += size;
}
}
layout->dirty = TRUE;
done:
FUNC_LEAVE(ret_value);
} /* end H5F_compact_writev */
|