11#include < vector>
2- #include < memory>
32
43extern " C" void * initIterator_C ();
54extern " C" void incrementIterator_C (void *);
65extern " C" int getIteratorValue_C (void *);
7-
8- auto initIterator (){
9- std::vector<int > vec{0 , 1 , 2 };
10- return vec;
11- }
6+ extern " C" void destroyIterator_C (void *);
127
138void incrementIterator (std::vector<int >::iterator &it) {
149 ++it;
@@ -18,19 +13,29 @@ int getIteratorValue(std::vector<int>::iterator &it) {
1813 return *it;
1914}
2015
16+ struct IteratorState {
17+ std::vector<int > vec{0 , 1 , 2 };
18+ std::vector<int >::iterator it = vec.begin();
19+ };
20+
2121
2222void * initIterator_C (){
23- auto it = initIterator ();
24- void * ptr = std::to_address (it .begin () );
25- return ptr ;
23+ auto * state = new IteratorState ();
24+ state-> it = state-> vec .begin ();
25+ return state ;
2626}
2727
2828void incrementIterator_C (void * ptr){
29- auto it = static_cast <std::vector< int >::iterator *>(ptr);
30- incrementIterator (* it);
29+ auto state = static_cast <IteratorState *>(ptr);
30+ incrementIterator (state-> it );
3131}
3232
3333int getIteratorValue_C (void * ptr){
34- auto it = static_cast <std::vector<int >::iterator*>(ptr);
35- return getIteratorValue (*it);
34+ auto state = static_cast <IteratorState*>(ptr);
35+ return getIteratorValue (state->it );
36+ }
37+
38+ void destroyIterator_C (void * ptr){
39+ auto state = static_cast <IteratorState*>(ptr);
40+ delete state;
3641}
0 commit comments