Skip to content
Snippets Groups Projects
Commit dcf90bdc authored by Martin Larralde's avatar Martin Larralde
Browse files

Fix `std::unique` requiring function pointers in OSX

parent 4ab56195
No related branches found
No related tags found
No related merge requests found
......@@ -12,7 +12,7 @@ from libc.limits cimport INT_MAX
from libc.stdint cimport int64_t, uint64_t
from libc.stdlib cimport malloc, realloc, free
from libcpp cimport bool, nullptr
from libcpp.algorithm cimport sort
from libcpp.algorithm cimport sort, unique
from libcpp.deque cimport deque
from libcpp.utility cimport move, pair
from libcpp.functional cimport function
......@@ -46,7 +46,7 @@ from fastani.map.base_types cimport (
# HACK: we need kseq_t* as a template argument, which is not supported by
# Cython at the moment, so we just `typedef kseq_t* kseq_ptr_t` in
# an external C++ header to make Cython happy
from _utils cimport kseq_ptr_t, toupper, complement, distance, unique_minimizers
from _utils cimport kseq_ptr_t, toupper, complement, distance
from _unicode cimport *
......@@ -579,11 +579,11 @@ cdef class Mapper(_Parameterized):
)
# find the unique minimizers in thos that were just obtained
sort(query.minimizerTableQuery.begin(), query.minimizerTableQuery.end(), MinimizerInfo_t.lessByHash)
sort(query.minimizerTableQuery.begin(), query.minimizerTableQuery.end(), &MinimizerInfo_t.lessByHash)
# manually implement `unique` as template instantiation has issues on OSX
it = query.minimizerTableQuery.begin()
uniq_end_iter = unique_minimizers(query.minimizerTableQuery.begin(), query.minimizerTableQuery.end())
uniq_end_iter = unique(query.minimizerTableQuery.begin(), query.minimizerTableQuery.end(), &MinimizerInfo_t.equalityByHash)
# early return if no minimizers were found
query.sketchSize = distance(query.minimizerTableQuery.begin(), uniq_end_iter)
......
......@@ -24,9 +24,3 @@ ZEXTERN int ZEXPORT gzread(gzFile file, void* buf, unsigned int len) {
ZEXTERN int ZEXPORT gzclose(gzFile file) {
return 0;
}
// Implementation from: https://en.cppreference.com/w/cpp/algorithm/
std::vector<skch::MinimizerInfo>::iterator unique_minimizers(std::vector<skch::MinimizerInfo>::iterator first, std::vector<skch::MinimizerInfo>::iterator last)
{
return std::unique(first, last, skch::MinimizerInfo::equalityByHash);
}
......@@ -44,8 +44,4 @@ extern "C" {
}
// OSX seems to have trouble instantiating `std::unique` with our
// custom type, so here is a dedicated implementation
std::vector<skch::MinimizerInfo>::iterator unique_minimizers(std::vector<skch::MinimizerInfo>::iterator first, std::vector<skch::MinimizerInfo>::iterator last);
#endif // ifdef __UTILS_HPP
......@@ -40,5 +40,4 @@ cdef extern from "_utils.hpp" nogil:
ctypedef kseq_t* kseq_ptr_t
cdef vector[MinimizerInfo_t].iterator unique_minimizers(vector[MinimizerInfo_t].iterator, vector[MinimizerInfo_t].iterator)
int complement(int)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment