Skip to content
Snippets Groups Projects
Commit a2b08e72 authored by marco's avatar marco
Browse files

switch to handwritten iterator export. the boost python one segfaults when DOPTMIZE=0

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2308 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 9a659bca
Branches
Tags
No related merge requests found
...@@ -24,10 +24,9 @@ ...@@ -24,10 +24,9 @@
.def("GetMaxLength", &C::GetMaxLength) \ .def("GetMaxLength", &C::GetMaxLength) \
.def("GetMinLength", &C::GetMinLength) \ .def("GetMinLength", &C::GetMinLength) \
.def("Take", &C::Take) \ .def("Take", &C::Take) \
.def("Slice", &C::Slice) \ .def("Slice", &C::Slice) \
.def("SequencesHaveEqualLength", \ .def("SequencesHaveEqualLength", \
&C::SequencesHaveEqualLength) \ &C::SequencesHaveEqualLength) \
.def("__getitem__", &C::operator[]) \ .def("__getitem__", &C::operator[]) \
.def("__iter__", iterator<C>()) \
.def("__len__", &C::GetCount) .def("__len__", &C::GetCount)
...@@ -134,6 +134,53 @@ private: ...@@ -134,6 +134,53 @@ private:
AlignedColumnIterator e_; AlignedColumnIterator e_;
}; };
struct ConstSeqListIter {
ConstSeqListIter(ConstSequenceList& list):
b_(list.begin()), e_(list.end())
{ }
ConstSequenceHandle next()
{
if (b_==e_) {
boost::python::objects::stop_iteration_error();
}
ConstSequenceHandle s=*b_;
++b_;
return s;
}
private:
ConstSequenceList::iterator b_;
ConstSequenceList::iterator e_;
};
struct SeqListIter {
SeqListIter(SequenceList& list):
b_(list.begin()), e_(list.end())
{ }
SequenceHandle next()
{
if (b_==e_) {
boost::python::objects::stop_iteration_error();
}
SequenceHandle s=*b_;
++b_;
return s;
}
private:
SequenceList::iterator b_;
SequenceList::iterator e_;
};
ConstSeqListIter iter_cs(ConstSequenceList& sl)
{
return ConstSeqListIter(sl);
}
SeqListIter iter_sl(SequenceList& sl)
{
return SeqListIter(sl);
}
RegionRangeIter iter_range1(AlignmentHandle& aln) RegionRangeIter iter_range1(AlignmentHandle& aln)
{ {
...@@ -229,6 +276,12 @@ void export_sequence() ...@@ -229,6 +276,12 @@ void export_sequence()
class_<RevRegionRangeIter>("RevRegionRangeIter", no_init) class_<RevRegionRangeIter>("RevRegionRangeIter", no_init)
.def("next", &RevRegionRangeIter::next) .def("next", &RevRegionRangeIter::next)
; ;
class_<ConstSeqListIter>("ConstSeqListIter", no_init)
.def("next", &ConstSeqListIter::next)
;
class_<SeqListIter>("SeqListIter", no_init)
.def("next", &SeqListIter::next)
;
class_<AlignmentHandle>("AlignmentHandle", init<>()) class_<AlignmentHandle>("AlignmentHandle", init<>())
.def("GetCount", &AlignmentHandle::GetCount) .def("GetCount", &AlignmentHandle::GetCount)
.add_property("sequence_count", &AlignmentHandle::GetCount) .add_property("sequence_count", &AlignmentHandle::GetCount)
...@@ -284,10 +337,12 @@ void export_sequence() ...@@ -284,10 +337,12 @@ void export_sequence()
class_<ConstSequenceList>("ConstSequenceList", init<>()) class_<ConstSequenceList>("ConstSequenceList", init<>())
CONST_SEQ_LIST_DEF(ConstSequenceList) CONST_SEQ_LIST_DEF(ConstSequenceList)
.def("__getitem__", &do_slice_a) .def("__getitem__", &do_slice_a)
.def("__iter__", &iter_cs)
; ;
class_<SequenceList>("SequenceList", init<>()) class_<SequenceList>("SequenceList", init<>())
CONST_SEQ_LIST_DEF(SequenceList) CONST_SEQ_LIST_DEF(SequenceList)
.def("__getitem__", &do_slice_b) .def("__getitem__", &do_slice_b)
.def("__iter__", &iter_sl)
; ;
class_<AlignmentList>("AlignmentList", init<>()) class_<AlignmentList>("AlignmentList", init<>())
.def(vector_indexing_suite<AlignmentList>()) .def(vector_indexing_suite<AlignmentList>())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment