Blame tests/run/cpp_stl.pyx
|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
# tag: cpp, werror
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef extern from "vector" namespace "std":
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef cppclass vector[T]:
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
T at(int)
|
|
Packit |
562c7a |
void push_back(T t)
|
|
Packit |
562c7a |
void assign(int, T)
|
|
Packit |
562c7a |
void clear()
|
|
Packit |
562c7a |
int size()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cppclass iterator:
|
|
Packit |
562c7a |
T operator*()
|
|
Packit |
562c7a |
iterator operator++()
|
|
Packit |
562c7a |
bint operator==(iterator)
|
|
Packit |
562c7a |
bint operator!=(iterator)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
iterator end()
|
|
Packit |
562c7a |
iterator begin()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
from cython.operator cimport dereference as deref, preincrement as inc
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_vector(L):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_vector([1,10,100])
|
|
Packit |
562c7a |
1
|
|
Packit |
562c7a |
10
|
|
Packit |
562c7a |
100
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
v = new vector[int]()
|
|
Packit |
562c7a |
for a in L:
|
|
Packit |
562c7a |
v.push_back(a)
|
|
Packit |
562c7a |
cdef int i
|
|
Packit |
562c7a |
for i in range(len(L)):
|
|
Packit |
562c7a |
print v.at(i)
|
|
Packit |
562c7a |
del v
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
ctypedef int my_int
|
|
Packit |
562c7a |
def test_vector_typedef(L):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_vector_typedef([1, 2, 3])
|
|
Packit |
562c7a |
[1, 2, 3]
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef vector[my_int] v = L
|
|
Packit |
562c7a |
cdef vector[int] vv = v
|
|
Packit |
562c7a |
return vv
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_vector_iterator(L):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_vector([11, 37, 389, 5077])
|
|
Packit |
562c7a |
11
|
|
Packit |
562c7a |
37
|
|
Packit |
562c7a |
389
|
|
Packit |
562c7a |
5077
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
v = new vector[int]()
|
|
Packit |
562c7a |
for a in L:
|
|
Packit |
562c7a |
v.push_back(a)
|
|
Packit |
562c7a |
cdef vector[int].iterator iter = v.begin()
|
|
Packit |
562c7a |
while iter != v.end():
|
|
Packit |
562c7a |
print deref(iter)
|
|
Packit |
562c7a |
inc(iter)
|
|
Packit |
562c7a |
del v
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef class VectorWrapper:
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> VectorWrapper(1, .5, .25, .125)
|
|
Packit |
562c7a |
[1.0, 0.5, 0.25, 0.125]
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef vector[double] vector
|
|
Packit |
562c7a |
def __init__(self, *args):
|
|
Packit |
562c7a |
self.vector = args
|
|
Packit |
562c7a |
def __repr__(self):
|
|
Packit |
562c7a |
return repr(self.vector)
|