Skip to content

Commit f95a526

Browse files
committed
Fix insert interface issue
1 parent 1ebc6c9 commit f95a526

File tree

4 files changed

+51
-80
lines changed

4 files changed

+51
-80
lines changed

include/abstract_index.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ class AbstractIndex
8080
float *distances);
8181

8282
// insert points with labels, labels should be present for filtered index
83-
template <typename data_type, typename tag_type, typename label_type>
84-
int insert_point(const data_type *point, const tag_type tag, const std::vector<label_type> &labels);
83+
template <typename data_type, typename tag_type>
84+
int insert_point(const data_type *point, const tag_type tag, const std::vector<std::string> &labels);
8585

8686
// insert point for unfiltered index build. do not use with filtered index
8787
template <typename data_type, typename tag_type> int insert_point(const data_type *point, const tag_type tag);
@@ -116,7 +116,7 @@ class AbstractIndex
116116
virtual std::pair<uint32_t, uint32_t> _search_with_filters(const DataType &query, const std::string &filter_label,
117117
const size_t K, const uint32_t L, std::any &indices,
118118
float *distances) = 0;
119-
virtual int _insert_point(const DataType &data_point, const TagType tag, Labelvector &labels) = 0;
119+
virtual int _insert_point(const DataType &data_point, const TagType tag, const std::vector<std::string> &labels) = 0;
120120
virtual int _insert_point(const DataType &data_point, const TagType tag) = 0;
121121
virtual int _lazy_delete(const TagType &tag) = 0;
122122
virtual void _lazy_delete(TagVector &tags, TagVector &failed_tags) = 0;

include/index.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ template <typename T, typename TagT = uint32_t, typename LabelT = uint32_t> clas
328328
float *distances) override;
329329

330330
virtual int _insert_point(const DataType &data_point, const TagType tag) override;
331-
virtual int _insert_point(const DataType &data_point, const TagType tag, Labelvector &labels) override;
331+
virtual int _insert_point(const DataType &data_point, const TagType tag, const std::vector<std::string> &labels) override;
332332

333333
virtual int _lazy_delete(const TagType &tag) override;
334334

src/abstract_index.cpp

+38-73
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,12 @@ int AbstractIndex::insert_point(const data_type *point, const tag_type tag)
5757
return this->_insert_point(any_point, any_tag);
5858
}
5959

60-
template <typename data_type, typename tag_type, typename label_type>
61-
int AbstractIndex::insert_point(const data_type *point, const tag_type tag, const std::vector<label_type> &labels)
60+
template <typename data_type, typename tag_type>
61+
int AbstractIndex::insert_point(const data_type *point, const tag_type tag, const std::vector<std::string>& labels)
6262
{
6363
auto any_point = std::any(point);
6464
auto any_tag = std::any(tag);
65-
auto any_labels = Labelvector(labels);
66-
return this->_insert_point(any_point, any_tag, any_labels);
65+
return this->_insert_point(any_point, any_tag, labels);
6766
}
6867

6968
template <typename tag_type> int AbstractIndex::lazy_delete(const tag_type &tag)
@@ -259,75 +258,41 @@ template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, tag_uint128>(c
259258
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, tag_uint128>(const uint8_t* point, const tag_uint128 tag);
260259
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, tag_uint128>(const int8_t* point, const tag_uint128 tag);
261260

262-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, int32_t, uint16_t>(
263-
const float *point, const int32_t tag, const std::vector<uint16_t> &labels);
264-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, int32_t, uint16_t>(
265-
const uint8_t *point, const int32_t tag, const std::vector<uint16_t> &labels);
266-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, int32_t, uint16_t>(
267-
const int8_t *point, const int32_t tag, const std::vector<uint16_t> &labels);
268-
269-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, uint32_t, uint16_t>(
270-
const float *point, const uint32_t tag, const std::vector<uint16_t> &labels);
271-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, uint32_t, uint16_t>(
272-
const uint8_t *point, const uint32_t tag, const std::vector<uint16_t> &labels);
273-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, uint32_t, uint16_t>(
274-
const int8_t *point, const uint32_t tag, const std::vector<uint16_t> &labels);
275-
276-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, int64_t, uint16_t>(
277-
const float *point, const int64_t tag, const std::vector<uint16_t> &labels);
278-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, int64_t, uint16_t>(
279-
const uint8_t *point, const int64_t tag, const std::vector<uint16_t> &labels);
280-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, int64_t, uint16_t>(
281-
const int8_t *point, const int64_t tag, const std::vector<uint16_t> &labels);
282-
283-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, uint64_t, uint16_t>(
284-
const float *point, const uint64_t tag, const std::vector<uint16_t> &labels);
285-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, uint64_t, uint16_t>(
286-
const uint8_t *point, const uint64_t tag, const std::vector<uint16_t> &labels);
287-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, uint64_t, uint16_t>(
288-
const int8_t *point, const uint64_t tag, const std::vector<uint16_t> &labels);
289-
290-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, tag_uint128, uint16_t>(
291-
const float* point, const tag_uint128 tag, const std::vector<uint16_t>& labels);
292-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, tag_uint128, uint16_t>(
293-
const uint8_t* point, const tag_uint128 tag, const std::vector<uint16_t>& labels);
294-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, tag_uint128, uint16_t>(
295-
const int8_t* point, const tag_uint128 tag, const std::vector<uint16_t>& labels);
296-
297-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, int32_t, uint32_t>(
298-
const float *point, const int32_t tag, const std::vector<uint32_t> &labels);
299-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, int32_t, uint32_t>(
300-
const uint8_t *point, const int32_t tag, const std::vector<uint32_t> &labels);
301-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, int32_t, uint32_t>(
302-
const int8_t *point, const int32_t tag, const std::vector<uint32_t> &labels);
303-
304-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, uint32_t, uint32_t>(
305-
const float *point, const uint32_t tag, const std::vector<uint32_t> &labels);
306-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, uint32_t, uint32_t>(
307-
const uint8_t *point, const uint32_t tag, const std::vector<uint32_t> &labels);
308-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, uint32_t, uint32_t>(
309-
const int8_t *point, const uint32_t tag, const std::vector<uint32_t> &labels);
310-
311-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, int64_t, uint32_t>(
312-
const float *point, const int64_t tag, const std::vector<uint32_t> &labels);
313-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, int64_t, uint32_t>(
314-
const uint8_t *point, const int64_t tag, const std::vector<uint32_t> &labels);
315-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, int64_t, uint32_t>(
316-
const int8_t *point, const int64_t tag, const std::vector<uint32_t> &labels);
317-
318-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, uint64_t, uint32_t>(
319-
const float *point, const uint64_t tag, const std::vector<uint32_t> &labels);
320-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, uint64_t, uint32_t>(
321-
const uint8_t *point, const uint64_t tag, const std::vector<uint32_t> &labels);
322-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, uint64_t, uint32_t>(
323-
const int8_t *point, const uint64_t tag, const std::vector<uint32_t> &labels);
324-
325-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, tag_uint128, uint32_t>(
326-
const float* point, const tag_uint128 tag, const std::vector<uint32_t>& labels);
327-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, tag_uint128, uint32_t>(
328-
const uint8_t* point, const tag_uint128 tag, const std::vector<uint32_t>& labels);
329-
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, tag_uint128, uint32_t>(
330-
const int8_t* point, const tag_uint128 tag, const std::vector<uint32_t>& labels);
261+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, int32_t>(
262+
const float *point, const int32_t tag, const std::vector<std::string> &labels);
263+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, int32_t>(
264+
const uint8_t *point, const int32_t tag, const std::vector<std::string> &labels);
265+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, int32_t>(
266+
const int8_t *point, const int32_t tag, const std::vector<std::string> &labels);
267+
268+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, uint32_t>(
269+
const float *point, const uint32_t tag, const std::vector<std::string> &labels);
270+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, uint32_t>(
271+
const uint8_t *point, const uint32_t tag, const std::vector<std::string> &labels);
272+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, uint32_t>(
273+
const int8_t *point, const uint32_t tag, const std::vector<std::string> &labels);
274+
275+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, int64_t>(
276+
const float *point, const int64_t tag, const std::vector<std::string> &labels);
277+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, int64_t>(
278+
const uint8_t *point, const int64_t tag, const std::vector<std::string> &labels);
279+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, int64_t>(
280+
const int8_t *point, const int64_t tag, const std::vector<std::string> &labels);
281+
282+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, uint64_t>(
283+
const float *point, const uint64_t tag, const std::vector<std::string> &labels);
284+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, uint64_t>(
285+
const uint8_t *point, const uint64_t tag, const std::vector<std::string> &labels);
286+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, uint64_t>(
287+
const int8_t *point, const uint64_t tag, const std::vector<std::string> &labels);
288+
289+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<float, tag_uint128>(
290+
const float* point, const tag_uint128 tag, const std::vector<std::string>& labels);
291+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<uint8_t, tag_uint128>(
292+
const uint8_t* point, const tag_uint128 tag, const std::vector<std::string>& labels);
293+
template DISKANN_DLLEXPORT int AbstractIndex::insert_point<int8_t, tag_uint128>(
294+
const int8_t* point, const tag_uint128 tag, const std::vector<std::string>& labels);
295+
331296

332297
template DISKANN_DLLEXPORT int AbstractIndex::lazy_delete<int32_t>(const int32_t &tag);
333298
template DISKANN_DLLEXPORT int AbstractIndex::lazy_delete<uint32_t>(const uint32_t &tag);

src/index.cpp

+9-3
Original file line numberDiff line numberDiff line change
@@ -3085,12 +3085,18 @@ int Index<T, TagT, LabelT>::_insert_point(const DataType &point, const TagType t
30853085
}
30863086

30873087
template <typename T, typename TagT, typename LabelT>
3088-
int Index<T, TagT, LabelT>::_insert_point(const DataType &point, const TagType tag, Labelvector &labels)
3088+
int Index<T, TagT, LabelT>::_insert_point(const DataType &point, const TagType tag, const std::vector<std::string>& labels)
30893089
{
30903090
try
30913091
{
3092-
return this->insert_point(std::any_cast<const T *>(point), std::any_cast<const TagT>(tag),
3093-
labels.get<const std::vector<LabelT>>());
3092+
std::vector<LabelT> converted_labels;
3093+
converted_labels.reserve(labels.size());
3094+
for (const auto& label : labels)
3095+
{
3096+
auto converted_label = this->get_converted_label(label);
3097+
converted_labels.push_back(converted_label);
3098+
}
3099+
return this->insert_point(std::any_cast<const T *>(point), std::any_cast<const TagT>(tag), converted_labels);
30943100
}
30953101
catch (const std::bad_any_cast &anycast_e)
30963102
{

0 commit comments

Comments
 (0)