Skip to content

Commit b6920d0

Browse files
committed
fixed big-endian swap issue
1 parent 34c7dcf commit b6920d0

6 files changed

Lines changed: 14 additions & 4 deletions

File tree

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: filearray
22
Type: Package
33
Title: File-Backed Array for Out-of-Memory Computation
4-
Version: 0.1.5.9002
4+
Version: 0.1.5.9003
55
Language: en-US
66
Encoding: UTF-8
77
License: LGPL-3

R/header.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ read_header <- function(fid){
7474
} else {
7575
if( ENDIANNESS == "little" ){
7676
endian <- 'big'
77+
# TODO: support big-endian file? maybe not
7778
stop("The file endianess is not little?")
7879
} else {
7980
endian <- "little"

src/map.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ SEXP FARR_buffer_map(
196196
}
197197
}
198198
convert_as2(tmp, tmp_val, out_array_type);
199+
199200
UNPROTECT(1); // tmp
200201

201202
FARR_subset_assign_sequential_bare(

src/save.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ SEXP FARR_subset_assign_sequential_bare(
2222
) {
2323
R_xlen_t len = Rf_xlength(value_);
2424

25+
// print(wrap(unit_partlen));
26+
// print(cum_partsizes);
2527
// print(value_);
2628

2729
int file_buffer_elemsize = file_element_size(array_type);
@@ -152,7 +154,12 @@ SEXP FARR_subset_assign_sequential_bare(
152154
break;
153155
}
154156
case INTSXP: {
157+
// const unsigned char *buffer_src = (const unsigned char*)(INTEGER(value_) + nwrite);
158+
// const unsigned char *buffer_dst = (const unsigned char*)(begin);
155159
lendian_assign(begin, INTEGER(value_) + nwrite, file_buffer_elemsize, write_len);
160+
// for( size_t tt = 0 ; tt < file_buffer_elemsize * write_len ; tt++ ) {
161+
// Rcout << (int)*(buffer_src + tt) << " - " << (int)*(buffer_dst + tt) << "\n";
162+
// }
156163
// lendian_fwrite(INTEGER(value_) + nwrite, file_buffer_elemsize, write_len, conn);
157164
break;
158165
}

src/serialize.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,9 @@ void lendian_assign(void* dst, const void* src, const size_t& elem_size, const s
128128
const unsigned char *buffer_src = (const unsigned char*)src;
129129
unsigned char *buffer_dst = (unsigned char*)dst;
130130
size_t i = 0;
131-
for(size_t idx = 0; idx < nelems; idx++, buffer_dst++){
132-
for(i = 0; i < elem_size; i++){
133-
*(buffer_dst + i) = *(buffer_src + (elem_size - i - 1));
131+
for(size_t idx = 0; idx < nelems; idx++){
132+
for(i = 0; i < elem_size; i++, buffer_dst++){
133+
*buffer_dst = *(buffer_src + (idx * elem_size + elem_size - i - 1));
134134
}
135135
}
136136
} else {

tests/testthat/test-method_subsetAssign.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ test_that("subset-assign filearray-proxy", {
1515
expect_equal(x[idx1, idx2], x0[idx1, idx2])
1616
expect_equal(y[1,1:12, dimnames = NULL], rep(0L, 12))
1717
expect_equal(y[1:10,1, dimnames = NULL], rep(0L, 10))
18+
expect_equal(y[2:10,2:10], x0[2:10,2:10] + 1L)
1819
expect_equal(z[, idx2], 2 * y[, idx2])
1920

2021
expect_equal(y[2:10, 2:12], x[2:10, 2:12] + 1)

0 commit comments

Comments
 (0)