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

switch to hand-written iterator export

The iterator export shipping with boost.python seems to 
be broken (or I'm too stupid to use it).


git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1952 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent b4439554
No related branches found
No related tags found
No related merge requests found
...@@ -88,6 +88,38 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) { ...@@ -88,6 +88,38 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) {
return aln.MakeRegion(start, end-start); return aln.MakeRegion(start, end-start);
} }
struct RegionRangeIter {
RegionRangeIter(AlignedColumnIterator b,
AlignedColumnIterator e):
b_(b), e_(e)
{ }
AlignedColumn next()
{
if (b_==e_) {
boost::python::objects::stop_iteration_error();
}
AlignedColumn col=*b_;
++b_;
return col;
}
private:
AlignedColumnIterator b_;
AlignedColumnIterator e_;
};
RegionRangeIter iter_range1(AlignmentHandle& aln)
{
return RegionRangeIter(aln.begin(), aln.end());
}
RegionRangeIter iter_range2(AlignedRegion& aln_region)
{
return RegionRangeIter(aln_region.begin(), aln_region.end());
}
} }
void export_sequence() void export_sequence()
...@@ -148,6 +180,9 @@ void export_sequence() ...@@ -148,6 +180,9 @@ void export_sequence()
/*class_<SequenceHandleList>("SequenceHandleList", init<>()) /*class_<SequenceHandleList>("SequenceHandleList", init<>())
.def(vector_indexing_suite<SequenceHandleList>()) .def(vector_indexing_suite<SequenceHandleList>())
;*/ ;*/
class_<RegionRangeIter>("RegionRangeIter", no_init)
.def("next", &RegionRangeIter::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)
...@@ -167,7 +202,7 @@ void export_sequence() ...@@ -167,7 +202,7 @@ void export_sequence()
.def("Replace",&AlignmentHandle::Replace) .def("Replace",&AlignmentHandle::Replace)
.def("__getitem__", &slice_aln) .def("__getitem__", &slice_aln)
.def("__getitem__", &AlignmentHandle::operator[]) .def("__getitem__", &AlignmentHandle::operator[])
.def("__iter__", iterator<AlignmentHandle>()) .def("__iter__", iter_range1)
.add_property("sequences", &AlignmentHandle::GetSequences) .add_property("sequences", &AlignmentHandle::GetSequences)
.def("SetSequenceName", &AlignmentHandle::SetSequenceName) .def("SetSequenceName", &AlignmentHandle::SetSequenceName)
.def("SetSequenceOffset", &AlignmentHandle::SetSequenceOffset) .def("SetSequenceOffset", &AlignmentHandle::SetSequenceOffset)
...@@ -193,7 +228,7 @@ void export_sequence() ...@@ -193,7 +228,7 @@ void export_sequence()
&AlignedRegion::SetMaster) &AlignedRegion::SetMaster)
.def("__getitem__", &AlignedRegion::operator[]) .def("__getitem__", &AlignedRegion::operator[])
.def("__len__", &AlignedRegion::GetLength) .def("__len__", &AlignedRegion::GetLength)
.def("__iter__", iterator<AlignedRegion>()) .def("__iter__", iter_range2)
.add_property("start", &AlignedRegion::GetStart) .add_property("start", &AlignedRegion::GetStart)
.add_property("end", &AlignedRegion::GetEnd) .add_property("end", &AlignedRegion::GetEnd)
; ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment