faiss 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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