faiss/impl/index_write.cpp code
LIZHICHAOUNICORN opened this issue · comments
Zhichao Li commented
// main branch, faiss/impl/index_write.cpp:392
if (const IndexFlat* idxf = dynamic_cast<const IndexFlat*>(idx)) {
uint32_t h =
fourcc(idxf->metric_type == METRIC_INNER_PRODUCT ? "IxFI"
: idxf->metric_type == METRIC_L2 ? "IxF2"
: "IxFl");
WRITE1(h);
write_index_header(idx, f);
WRITEXBVECTOR(idxf->codes);
} else if (const IndexLSH* idxl = dynamic_cast<const IndexLSH*>(idx)) {
uint32_t h = fourcc("IxHe");
WRITE1(h);
write_index_header(idx, f);
WRITE1(idxl->nbits);
WRITE1(idxl->rotate_data);
WRITE1(idxl->train_thresholds);
WRITEVECTOR(idxl->thresholds);
int code_size_i = idxl->code_size;
WRITE1(code_size_i);
write_VectorTransform(&idxl->rrot, f);
WRITEVECTOR(idxl->codes);
...
}
Why the if condition statement use "=" ?
herodotos commented
I am not expert, but when you are doing dynamic cast, you checking if you have right object in variable idx, and to do that you must add dynamic cast to variable. https://www.youtube.com/watch?v=TM-U6m47i5w I hope i was helpful.