faiss 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/faiss/version.rb +1 -1
  4. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  5. data/vendor/faiss/faiss/AutoTune.h +55 -56
  6. data/vendor/faiss/faiss/Clustering.cpp +334 -195
  7. data/vendor/faiss/faiss/Clustering.h +88 -35
  8. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  9. data/vendor/faiss/faiss/IVFlib.h +48 -51
  10. data/vendor/faiss/faiss/Index.cpp +85 -103
  11. data/vendor/faiss/faiss/Index.h +54 -48
  12. data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
  13. data/vendor/faiss/faiss/Index2Layer.h +22 -22
  14. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  15. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  16. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  17. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  18. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  19. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  20. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  21. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  22. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  23. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  24. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  25. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  26. data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
  27. data/vendor/faiss/faiss/IndexFlat.h +35 -46
  28. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  29. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  30. data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
  31. data/vendor/faiss/faiss/IndexIVF.h +146 -113
  32. data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
  33. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  34. data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
  35. data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
  36. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
  37. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
  38. data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
  39. data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
  40. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
  41. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
  42. data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
  43. data/vendor/faiss/faiss/IndexLSH.h +21 -26
  44. data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
  45. data/vendor/faiss/faiss/IndexLattice.h +11 -16
  46. data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
  47. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  48. data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
  49. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  50. data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
  51. data/vendor/faiss/faiss/IndexPQ.h +64 -67
  52. data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
  53. data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
  54. data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
  55. data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
  56. data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
  57. data/vendor/faiss/faiss/IndexRefine.h +22 -23
  58. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  59. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  60. data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
  61. data/vendor/faiss/faiss/IndexResidual.h +152 -0
  62. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
  63. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
  64. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  65. data/vendor/faiss/faiss/IndexShards.h +85 -73
  66. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  67. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  68. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  69. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  70. data/vendor/faiss/faiss/MetricType.h +7 -7
  71. data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
  72. data/vendor/faiss/faiss/VectorTransform.h +61 -89
  73. data/vendor/faiss/faiss/clone_index.cpp +77 -73
  74. data/vendor/faiss/faiss/clone_index.h +4 -9
  75. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  76. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  77. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
  78. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  79. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  80. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  81. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  82. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  83. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  84. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  85. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  86. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  87. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  88. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  89. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  90. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  91. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  92. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  93. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  94. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  95. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  96. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  97. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  98. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  99. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  100. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  101. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  102. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  103. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  104. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  105. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  106. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  107. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  108. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  109. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  110. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  111. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  112. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  113. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  114. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  115. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  116. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  117. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  118. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  119. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  120. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
  121. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
  122. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  123. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  124. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  125. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  126. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  127. data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
  128. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  129. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
  130. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
  131. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  132. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  133. data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
  134. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  135. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  136. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  137. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  138. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  139. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  140. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
  141. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
  142. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  143. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
  144. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  145. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  146. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  147. data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
  148. data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
  149. data/vendor/faiss/faiss/impl/io.cpp +75 -94
  150. data/vendor/faiss/faiss/impl/io.h +31 -41
  151. data/vendor/faiss/faiss/impl/io_macros.h +40 -29
  152. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  153. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  154. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  155. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  156. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  157. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  158. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  159. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  160. data/vendor/faiss/faiss/index_factory.cpp +269 -218
  161. data/vendor/faiss/faiss/index_factory.h +6 -7
  162. data/vendor/faiss/faiss/index_io.h +23 -26
  163. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  164. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  165. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  166. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  167. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  168. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  169. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  170. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  171. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  172. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  173. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  174. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  175. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  176. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  177. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  178. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  179. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  180. data/vendor/faiss/faiss/utils/distances.cpp +301 -310
  181. data/vendor/faiss/faiss/utils/distances.h +133 -118
  182. data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
  183. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  184. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  185. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  186. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  187. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  188. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  189. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  190. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  191. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  192. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  193. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  194. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  195. data/vendor/faiss/faiss/utils/random.h +13 -16
  196. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  197. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  198. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  199. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  200. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  201. data/vendor/faiss/faiss/utils/utils.h +53 -48
  202. metadata +20 -2
@@ -8,150 +8,141 @@
8
8
  // -*- c++ -*-
9
9
 
10
10
  #include <algorithm>
11
- #include <cstring>
12
11
  #include <cassert>
12
+ #include <cstring>
13
13
 
14
- #include <faiss/impl/io.h>
15
14
  #include <faiss/impl/FaissAssert.h>
16
-
15
+ #include <faiss/impl/io.h>
17
16
 
18
17
  namespace faiss {
19
18
 
20
-
21
19
  /***********************************************************************
22
20
  * IO functions
23
21
  ***********************************************************************/
24
22
 
25
-
26
- int IOReader::fileno ()
27
- {
28
- FAISS_THROW_MSG ("IOReader does not support memory mapping");
23
+ int IOReader::fileno() {
24
+ FAISS_THROW_MSG("IOReader does not support memory mapping");
29
25
  }
30
26
 
31
- int IOWriter::fileno ()
32
- {
33
- FAISS_THROW_MSG ("IOWriter does not support memory mapping");
27
+ int IOWriter::fileno() {
28
+ FAISS_THROW_MSG("IOWriter does not support memory mapping");
34
29
  }
35
30
 
36
31
  /***********************************************************************
37
32
  * IO Vector
38
33
  ***********************************************************************/
39
34
 
40
-
41
- size_t VectorIOWriter::operator()(
42
- const void *ptr, size_t size, size_t nitems)
43
- {
35
+ size_t VectorIOWriter::operator()(const void* ptr, size_t size, size_t nitems) {
44
36
  size_t bytes = size * nitems;
45
37
  if (bytes > 0) {
46
38
  size_t o = data.size();
47
39
  data.resize(o + bytes);
48
- memcpy (&data[o], ptr, size * nitems);
40
+ memcpy(&data[o], ptr, size * nitems);
49
41
  }
50
42
  return nitems;
51
43
  }
52
44
 
53
- size_t VectorIOReader::operator()(
54
- void *ptr, size_t size, size_t nitems)
55
- {
56
- if (rp >= data.size()) return 0;
45
+ size_t VectorIOReader::operator()(void* ptr, size_t size, size_t nitems) {
46
+ if (rp >= data.size())
47
+ return 0;
57
48
  size_t nremain = (data.size() - rp) / size;
58
- if (nremain < nitems) nitems = nremain;
49
+ if (nremain < nitems)
50
+ nitems = nremain;
59
51
  if (size * nitems > 0) {
60
- memcpy (ptr, &data[rp], size * nitems);
52
+ memcpy(ptr, &data[rp], size * nitems);
61
53
  rp += size * nitems;
62
54
  }
63
55
  return nitems;
64
56
  }
65
57
 
66
-
67
-
68
-
69
58
  /***********************************************************************
70
59
  * IO File
71
60
  ***********************************************************************/
72
61
 
62
+ FileIOReader::FileIOReader(FILE* rf) : f(rf) {}
73
63
 
74
-
75
- FileIOReader::FileIOReader(FILE *rf): f(rf) {}
76
-
77
- FileIOReader::FileIOReader(const char * fname)
78
- {
64
+ FileIOReader::FileIOReader(const char* fname) {
79
65
  name = fname;
80
66
  f = fopen(fname, "rb");
81
- FAISS_THROW_IF_NOT_FMT (f, "could not open %s for reading: %s",
82
- fname, strerror(errno));
67
+ FAISS_THROW_IF_NOT_FMT(
68
+ f, "could not open %s for reading: %s", fname, strerror(errno));
83
69
  need_close = true;
84
70
  }
85
71
 
86
- FileIOReader::~FileIOReader() {
72
+ FileIOReader::~FileIOReader() {
87
73
  if (need_close) {
88
74
  int ret = fclose(f);
89
- if (ret != 0) {// we cannot raise and exception in the destructor
90
- fprintf(stderr, "file %s close error: %s",
91
- name.c_str(), strerror(errno));
75
+ if (ret != 0) { // we cannot raise and exception in the destructor
76
+ fprintf(stderr,
77
+ "file %s close error: %s",
78
+ name.c_str(),
79
+ strerror(errno));
92
80
  }
93
81
  }
94
82
  }
95
83
 
96
- size_t FileIOReader::operator()(void *ptr, size_t size, size_t nitems) {
84
+ size_t FileIOReader::operator()(void* ptr, size_t size, size_t nitems) {
97
85
  return fread(ptr, size, nitems, f);
98
86
  }
99
87
 
100
- int FileIOReader::fileno() {
101
- return ::fileno (f);
88
+ int FileIOReader::fileno() {
89
+ return ::fileno(f);
102
90
  }
103
91
 
92
+ FileIOWriter::FileIOWriter(FILE* wf) : f(wf) {}
104
93
 
105
- FileIOWriter::FileIOWriter(FILE *wf): f(wf) {}
106
-
107
- FileIOWriter::FileIOWriter(const char * fname)
108
- {
94
+ FileIOWriter::FileIOWriter(const char* fname) {
109
95
  name = fname;
110
96
  f = fopen(fname, "wb");
111
- FAISS_THROW_IF_NOT_FMT (f, "could not open %s for writing: %s",
112
- fname, strerror(errno));
97
+ FAISS_THROW_IF_NOT_FMT(
98
+ f, "could not open %s for writing: %s", fname, strerror(errno));
113
99
  need_close = true;
114
100
  }
115
101
 
116
- FileIOWriter::~FileIOWriter() {
102
+ FileIOWriter::~FileIOWriter() {
117
103
  if (need_close) {
118
104
  int ret = fclose(f);
119
105
  if (ret != 0) {
120
106
  // we cannot raise and exception in the destructor
121
- fprintf(stderr, "file %s close error: %s",
122
- name.c_str(), strerror(errno));
107
+ fprintf(stderr,
108
+ "file %s close error: %s",
109
+ name.c_str(),
110
+ strerror(errno));
123
111
  }
124
112
  }
125
113
  }
126
114
 
127
- size_t FileIOWriter::operator()(const void *ptr, size_t size, size_t nitems) {
115
+ size_t FileIOWriter::operator()(const void* ptr, size_t size, size_t nitems) {
128
116
  return fwrite(ptr, size, nitems, f);
129
117
  }
130
118
 
131
- int FileIOWriter::fileno() {
132
- return ::fileno (f);
119
+ int FileIOWriter::fileno() {
120
+ return ::fileno(f);
133
121
  }
134
122
 
135
123
  /***********************************************************************
136
124
  * IO buffer
137
125
  ***********************************************************************/
138
126
 
139
- BufferedIOReader::BufferedIOReader(IOReader *reader, size_t bsz):
140
- reader(reader), bsz(bsz), ofs(0), ofs2(0), b0(0), b1(0), buffer(bsz)
141
- {
142
- }
143
-
127
+ BufferedIOReader::BufferedIOReader(IOReader* reader, size_t bsz)
128
+ : reader(reader),
129
+ bsz(bsz),
130
+ ofs(0),
131
+ ofs2(0),
132
+ b0(0),
133
+ b1(0),
134
+ buffer(bsz) {}
144
135
 
145
- size_t BufferedIOReader::operator()(void *ptr, size_t unitsize, size_t nitems)
146
- {
136
+ size_t BufferedIOReader::operator()(void* ptr, size_t unitsize, size_t nitems) {
147
137
  size_t size = unitsize * nitems;
148
- if (size == 0) return 0;
149
- char * dst = (char*)ptr;
138
+ if (size == 0)
139
+ return 0;
140
+ char* dst = (char*)ptr;
150
141
  size_t nb;
151
142
 
152
143
  { // first copy available bytes
153
144
  nb = std::min(b1 - b0, size);
154
- memcpy (dst, buffer.data() + b0, nb);
145
+ memcpy(dst, buffer.data() + b0, nb);
155
146
  b0 += nb;
156
147
  dst += nb;
157
148
  size -= nb;
@@ -159,7 +150,7 @@ size_t BufferedIOReader::operator()(void *ptr, size_t unitsize, size_t nitems)
159
150
 
160
151
  // while we would like to have more data
161
152
  while (size > 0) {
162
- assert (b0 == b1); // buffer empty on input
153
+ assert(b0 == b1); // buffer empty on input
163
154
  // try to read from main reader
164
155
  b0 = 0;
165
156
  b1 = (*reader)(buffer.data(), 1, bsz);
@@ -172,7 +163,7 @@ size_t BufferedIOReader::operator()(void *ptr, size_t unitsize, size_t nitems)
172
163
 
173
164
  // copy remaining bytes
174
165
  size_t nb2 = std::min(b1, size);
175
- memcpy (dst, buffer.data(), nb2);
166
+ memcpy(dst, buffer.data(), nb2);
176
167
  b0 = nb2;
177
168
  nb += nb2;
178
169
  dst += nb2;
@@ -182,22 +173,22 @@ size_t BufferedIOReader::operator()(void *ptr, size_t unitsize, size_t nitems)
182
173
  return nb / unitsize;
183
174
  }
184
175
 
176
+ BufferedIOWriter::BufferedIOWriter(IOWriter* writer, size_t bsz)
177
+ : writer(writer), bsz(bsz), ofs2(0), b0(0), buffer(bsz) {}
185
178
 
186
- BufferedIOWriter::BufferedIOWriter(IOWriter *writer, size_t bsz):
187
- writer(writer), bsz(bsz), ofs2(0), b0(0), buffer(bsz)
188
- {
189
- }
190
-
191
- size_t BufferedIOWriter::operator()(const void *ptr, size_t unitsize, size_t nitems)
192
- {
179
+ size_t BufferedIOWriter::operator()(
180
+ const void* ptr,
181
+ size_t unitsize,
182
+ size_t nitems) {
193
183
  size_t size = unitsize * nitems;
194
- if (size == 0) return 0;
195
- const char * src = (const char*)ptr;
184
+ if (size == 0)
185
+ return 0;
186
+ const char* src = (const char*)ptr;
196
187
  size_t nb;
197
188
 
198
189
  { // copy as many bytes as possible to buffer
199
190
  nb = std::min(bsz - b0, size);
200
- memcpy (buffer.data() + b0, src, nb);
191
+ memcpy(buffer.data() + b0, src, nb);
201
192
  b0 += nb;
202
193
  src += nb;
203
194
  size -= nb;
@@ -207,15 +198,15 @@ size_t BufferedIOWriter::operator()(const void *ptr, size_t unitsize, size_t nit
207
198
  // now we need to flush to add more bytes
208
199
  size_t ofs = 0;
209
200
  do {
210
- assert (ofs < 10000000);
201
+ assert(ofs < 10000000);
211
202
  size_t written = (*writer)(buffer.data() + ofs, 1, bsz - ofs);
212
203
  FAISS_THROW_IF_NOT(written > 0);
213
204
  ofs += written;
214
- } while(ofs != bsz);
205
+ } while (ofs != bsz);
215
206
 
216
207
  // copy src to buffer
217
208
  size_t nb1 = std::min(bsz, size);
218
- memcpy (buffer.data(), src, nb1);
209
+ memcpy(buffer.data(), src, nb1);
219
210
  b0 = nb1;
220
211
  nb += nb1;
221
212
  src += nb1;
@@ -225,31 +216,25 @@ size_t BufferedIOWriter::operator()(const void *ptr, size_t unitsize, size_t nit
225
216
  return nb / unitsize;
226
217
  }
227
218
 
228
- BufferedIOWriter::~BufferedIOWriter()
229
- {
219
+ BufferedIOWriter::~BufferedIOWriter() {
230
220
  size_t ofs = 0;
231
- while(ofs != b0) {
221
+ while (ofs != b0) {
232
222
  // printf("Destructor write %zd \n", b0 - ofs);
233
223
  size_t written = (*writer)(buffer.data() + ofs, 1, b0 - ofs);
234
224
  FAISS_THROW_IF_NOT(written > 0);
235
225
  ofs += written;
236
226
  }
237
-
238
227
  }
239
228
 
240
-
241
-
242
-
243
-
244
- uint32_t fourcc (const char sx[4]) {
245
- FAISS_THROW_IF_NOT (4 == strlen(sx));
246
- const unsigned char *x = (unsigned char*)sx;
229
+ uint32_t fourcc(const char sx[4]) {
230
+ FAISS_THROW_IF_NOT(4 == strlen(sx));
231
+ const unsigned char* x = (unsigned char*)sx;
247
232
  return x[0] | x[1] << 8 | x[2] << 16 | x[3] << 24;
248
233
  }
249
234
 
250
- uint32_t fourcc (const std::string & sx) {
251
- FAISS_THROW_IF_NOT (sx.length() == 4);
252
- const unsigned char *x = (unsigned char*)sx.c_str();
235
+ uint32_t fourcc(const std::string& sx) {
236
+ FAISS_THROW_IF_NOT(sx.length() == 4);
237
+ const unsigned char* x = (unsigned char*)sx.c_str();
253
238
  return x[0] | x[1] << 8 | x[2] << 16 | x[3] << 24;
254
239
  }
255
240
 
@@ -264,7 +249,6 @@ std::string fourcc_inv(uint32_t x) {
264
249
  return std::string(str);
265
250
  }
266
251
 
267
-
268
252
  std::string fourcc_inv_printable(uint32_t x) {
269
253
  char cstr[5];
270
254
  fourcc_inv(x, cstr);
@@ -282,7 +266,4 @@ std::string fourcc_inv_printable(uint32_t x) {
282
266
  return str;
283
267
  }
284
268
 
285
-
286
-
287
-
288
269
  } // namespace faiss
@@ -16,25 +16,23 @@
16
16
 
17
17
  #pragma once
18
18
 
19
- #include <string>
20
19
  #include <cstdio>
20
+ #include <string>
21
21
  #include <vector>
22
22
 
23
23
  #include <faiss/Index.h>
24
24
 
25
25
  namespace faiss {
26
26
 
27
-
28
27
  struct IOReader {
29
28
  // name that can be used in error messages
30
29
  std::string name;
31
30
 
32
31
  // fread. Returns number of items read or 0 in case of EOF.
33
- virtual size_t operator()(
34
- void *ptr, size_t size, size_t nitems) = 0;
32
+ virtual size_t operator()(void* ptr, size_t size, size_t nitems) = 0;
35
33
 
36
34
  // return a file number that can be memory-mapped
37
- virtual int fileno ();
35
+ virtual int fileno();
38
36
 
39
37
  virtual ~IOReader() {}
40
38
  };
@@ -44,53 +42,51 @@ struct IOWriter {
44
42
  std::string name;
45
43
 
46
44
  // fwrite. Return number of items written
47
- virtual size_t operator()(
48
- const void *ptr, size_t size, size_t nitems) = 0;
45
+ virtual size_t operator()(const void* ptr, size_t size, size_t nitems) = 0;
49
46
 
50
47
  // return a file number that can be memory-mapped
51
- virtual int fileno ();
48
+ virtual int fileno();
52
49
 
53
50
  virtual ~IOWriter() noexcept(false) {}
54
51
  };
55
52
 
56
-
57
- struct VectorIOReader:IOReader {
53
+ struct VectorIOReader : IOReader {
58
54
  std::vector<uint8_t> data;
59
55
  size_t rp = 0;
60
- size_t operator()(void *ptr, size_t size, size_t nitems) override;
56
+ size_t operator()(void* ptr, size_t size, size_t nitems) override;
61
57
  };
62
58
 
63
- struct VectorIOWriter:IOWriter {
59
+ struct VectorIOWriter : IOWriter {
64
60
  std::vector<uint8_t> data;
65
- size_t operator()(const void *ptr, size_t size, size_t nitems) override;
61
+ size_t operator()(const void* ptr, size_t size, size_t nitems) override;
66
62
  };
67
63
 
68
- struct FileIOReader: IOReader {
69
- FILE *f = nullptr;
64
+ struct FileIOReader : IOReader {
65
+ FILE* f = nullptr;
70
66
  bool need_close = false;
71
67
 
72
- FileIOReader(FILE *rf);
68
+ FileIOReader(FILE* rf);
73
69
 
74
- FileIOReader(const char * fname);
70
+ FileIOReader(const char* fname);
75
71
 
76
72
  ~FileIOReader() override;
77
73
 
78
- size_t operator()(void *ptr, size_t size, size_t nitems) override;
74
+ size_t operator()(void* ptr, size_t size, size_t nitems) override;
79
75
 
80
76
  int fileno() override;
81
77
  };
82
78
 
83
- struct FileIOWriter: IOWriter {
84
- FILE *f = nullptr;
79
+ struct FileIOWriter : IOWriter {
80
+ FILE* f = nullptr;
85
81
  bool need_close = false;
86
82
 
87
- FileIOWriter(FILE *wf);
83
+ FileIOWriter(FILE* wf);
88
84
 
89
- FileIOWriter(const char * fname);
85
+ FileIOWriter(const char* fname);
90
86
 
91
87
  ~FileIOWriter() override;
92
88
 
93
- size_t operator()(const void *ptr, size_t size, size_t nitems) override;
89
+ size_t operator()(const void* ptr, size_t size, size_t nitems) override;
94
90
 
95
91
  int fileno() override;
96
92
  };
@@ -103,12 +99,9 @@ struct FileIOWriter: IOWriter {
103
99
  * the read/write functions.
104
100
  *******************************************************/
105
101
 
106
-
107
-
108
102
  /** wraps an ioreader to make buffered reads to avoid too small reads */
109
- struct BufferedIOReader: IOReader {
110
-
111
- IOReader *reader;
103
+ struct BufferedIOReader : IOReader {
104
+ IOReader* reader;
112
105
  size_t bsz;
113
106
  size_t ofs; ///< offset in input stream
114
107
  size_t ofs2; ///< number of bytes returned to caller
@@ -119,37 +112,34 @@ struct BufferedIOReader: IOReader {
119
112
  * @param bsz buffer size (bytes). Reads will be done by batched of
120
113
  * this size
121
114
  */
122
- explicit BufferedIOReader(IOReader *reader, size_t bsz = 1024 * 1024);
115
+ explicit BufferedIOReader(IOReader* reader, size_t bsz = 1024 * 1024);
123
116
 
124
- size_t operator()(void *ptr, size_t size, size_t nitems) override;
117
+ size_t operator()(void* ptr, size_t size, size_t nitems) override;
125
118
  };
126
119
 
127
-
128
- struct BufferedIOWriter: IOWriter {
129
-
130
- IOWriter *writer;
120
+ struct BufferedIOWriter : IOWriter {
121
+ IOWriter* writer;
131
122
  size_t bsz;
132
123
  size_t ofs;
133
- size_t ofs2; ///< number of bytes received from caller
134
- size_t b0; ///< amount of data in buffer
124
+ size_t ofs2; ///< number of bytes received from caller
125
+ size_t b0; ///< amount of data in buffer
135
126
  std::vector<char> buffer;
136
127
 
137
- explicit BufferedIOWriter(IOWriter *writer, size_t bsz = 1024 * 1024);
128
+ explicit BufferedIOWriter(IOWriter* writer, size_t bsz = 1024 * 1024);
138
129
 
139
- size_t operator()(const void *ptr, size_t size, size_t nitems) override;
130
+ size_t operator()(const void* ptr, size_t size, size_t nitems) override;
140
131
 
141
132
  // flushes
142
133
  ~BufferedIOWriter() override;
143
134
  };
144
135
 
145
136
  /// cast a 4-character string to a uint32_t that can be written and read easily
146
- uint32_t fourcc (const char sx[4]);
147
- uint32_t fourcc (const std::string & sx);
137
+ uint32_t fourcc(const char sx[4]);
138
+ uint32_t fourcc(const std::string& sx);
148
139
 
149
140
  // decoding of fourcc (int32 -> string)
150
141
  void fourcc_inv(uint32_t x, char str[5]);
151
142
  std::string fourcc_inv(uint32_t x);
152
143
  std::string fourcc_inv_printable(uint32_t x);
153
144
 
154
-
155
145
  } // namespace faiss