cython
1# mode: run
2# tag: cpp, werror
3
4cdef extern from "vector" namespace "std":
5
6cdef cppclass vector[T]:
7
8T at(int)
9void push_back(T t)
10void assign(int, T)
11void clear()
12int size()
13
14cppclass iterator:
15T operator*()
16iterator operator++()
17bint operator==(iterator)
18bint operator!=(iterator)
19
20iterator end()
21iterator begin()
22
23from cython.operator cimport dereference as deref, preincrement as inc
24
25def test_vector(L):
26"""
27>>> test_vector([1,10,100])
281
2910
30100
31"""
32v = new vector[int]()
33for a in L:
34v.push_back(a)
35cdef int i
36for i in range(len(L)):
37print v.at(i)
38del v
39
40ctypedef int my_int
41def test_vector_typedef(L):
42"""
43>>> test_vector_typedef([1, 2, 3])
44[1, 2, 3]
45"""
46cdef vector[my_int] v = L
47cdef vector[int] vv = v
48return vv
49
50def test_vector_iterator(L):
51"""
52>>> test_vector([11, 37, 389, 5077])
5311
5437
55389
565077
57"""
58v = new vector[int]()
59for a in L:
60v.push_back(a)
61cdef vector[int].iterator iter = v.begin()
62while iter != v.end():
63print deref(iter)
64inc(iter)
65del v
66
67cdef class VectorWrapper:
68"""
69>>> VectorWrapper(1, .5, .25, .125)
70[1.0, 0.5, 0.25, 0.125]
71"""
72cdef vector[double] vector
73def __init__(self, *args):
74self.vector = args
75def __repr__(self):
76return repr(self.vector)
77