Coverage Report

Created: 2026-03-13 03:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
contrib/faiss/faiss/impl/zerocopy_io.cpp
Line
Count
Source
1
/*
2
 * Copyright (c) Meta Platforms, Inc. and affiliates.
3
 *
4
 * This source code is licensed under the MIT license found in the
5
 * LICENSE file in the root directory of this source tree.
6
 */
7
8
#include <faiss/impl/zerocopy_io.h>
9
#include <cstring>
10
11
namespace faiss {
12
13
ZeroCopyIOReader::ZeroCopyIOReader(uint8_t* data, size_t size)
14
0
        : data_(data), rp_(0), total_(size) {}
15
16
0
ZeroCopyIOReader::~ZeroCopyIOReader() {}
17
18
0
size_t ZeroCopyIOReader::get_data_view(void** ptr, size_t size, size_t nitems) {
19
0
    if (size == 0) {
20
0
        return nitems;
21
0
    }
22
23
0
    size_t actual_size = size * nitems;
24
0
    if (rp_ + size * nitems > total_) {
25
0
        actual_size = total_ - rp_;
26
0
    }
27
28
0
    size_t actual_nitems = (actual_size + size - 1) / size;
29
0
    if (actual_nitems == 0) {
30
0
        return 0;
31
0
    }
32
33
    // get an address
34
0
    *ptr = (void*)(reinterpret_cast<const char*>(data_ + rp_));
35
36
    // alter pos
37
0
    rp_ += size * actual_nitems;
38
39
0
    return actual_nitems;
40
0
}
41
42
0
void ZeroCopyIOReader::reset() {
43
0
    rp_ = 0;
44
0
}
45
46
0
size_t ZeroCopyIOReader::operator()(void* ptr, size_t size, size_t nitems) {
47
0
    if (size * nitems == 0) {
48
0
        return 0;
49
0
    }
50
51
0
    if (rp_ >= total_) {
52
0
        return 0;
53
0
    }
54
0
    size_t nremain = (total_ - rp_) / size;
55
0
    if (nremain < nitems) {
56
0
        nitems = nremain;
57
0
    }
58
0
    memcpy(ptr, (data_ + rp_), size * nitems);
59
0
    rp_ += size * nitems;
60
0
    return nitems;
61
0
}
62
63
0
int ZeroCopyIOReader::filedescriptor() {
64
0
    return -1; // Indicating no file descriptor available for memory buffer
65
0
}
66
67
} // namespace faiss