Skip to content

Commit 2d4634e

Browse files
committed
stfpy: Added support to get header comments
1 parent a24db9b commit 2d4634e

File tree

3 files changed

+66
-5
lines changed

3 files changed

+66
-5
lines changed

stfpy/stfpy/stf_inst_reader.pxd

+22
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,31 @@
11
# distutils: language = c++
22

3+
from cython.operator cimport dereference
34
from stfpy.stf_lib.stf_inst_reader cimport STFInstReader as _STFInstReader
5+
from stfpy.stf_lib.stf_inst_reader cimport StringVector as _StringVector, StringVectorIterator as _StringVectorIterator
46

57
ctypedef _STFInstReader.iterator _STFInstReaderIterator
68

9+
cdef class StringVectorIterator:
10+
cdef _StringVectorIterator c_it
11+
cdef _StringVectorIterator c_end_it
12+
13+
@staticmethod
14+
cdef inline StringVectorIterator _construct(const _StringVector* vec):
15+
it = StringVectorIterator()
16+
it.c_it = dereference(vec).begin()
17+
it.c_end_it = dereference(vec).end()
18+
return it
19+
20+
cdef class StringVector:
21+
cdef const _StringVector* c_vec
22+
23+
@staticmethod
24+
cdef inline StringVector _construct(const _StringVector& vec):
25+
new_vec = StringVector()
26+
new_vec.c_vec = &vec
27+
return new_vec
28+
729
cdef class STFInstReaderIterator:
830
cdef _STFInstReaderIterator c_it
931
cdef _STFInstReaderIterator c_end_it

stfpy/stfpy/stf_inst_reader.pyx

+35-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,27 @@ from stfpy.stf_inst import STFInst
77
from cython.operator cimport dereference, preincrement
88
include "stfpy/stf_lib/stf_reader_constants.pxi"
99

10+
cdef class StringVectorIterator:
11+
def __next__(self):
12+
if self.c_it == self.c_end_it:
13+
raise StopIteration
14+
value = dereference(self.c_it)
15+
preincrement(self.c_it)
16+
return value
17+
18+
cdef class StringVector:
19+
def __iter__(self):
20+
return StringVectorIterator._construct(self.c_vec)
21+
22+
def __len__(self):
23+
return dereference(self.c_vec).size()
24+
25+
def __getitem__(self, idx):
26+
return dereference(self.c_vec).at(idx)
27+
28+
def __bool__(self):
29+
return not dereference(self.c_vec).empty()
30+
1031
cdef class STFInstReaderIterator:
1132
def __next__(self):
1233
if self.c_it == self.c_end_it:
@@ -24,11 +45,11 @@ cdef class STFInstReader:
2445
size_t buffer_size = __DEFAULT_BUFFER_SIZE,
2546
bint force_single_threaded_stream = False):
2647
self.c_reader = new _STFInstReader(filename,
27-
only_user_mode,
28-
enable_address_translation,
29-
filter_mode_change_events,
30-
buffer_size,
31-
force_single_threaded_stream)
48+
only_user_mode,
49+
enable_address_translation,
50+
filter_mode_change_events,
51+
buffer_size,
52+
force_single_threaded_stream)
3253

3354
def __dealloc__(self):
3455
del self.c_reader
@@ -44,3 +65,12 @@ cdef class STFInstReader:
4465

4566
def close(self):
4667
dereference(self.c_reader).close()
68+
69+
def getMajorVersion(self):
70+
return self.c_reader.major()
71+
72+
def getMinorVersion(self):
73+
return self.c_reader.minor()
74+
75+
def getHeaderComments(self):
76+
return StringVector._construct(dereference(self.c_reader).getHeaderCommentsString())

stfpy/stfpy/stf_lib/stf_inst_reader.pxd

+9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
# distutils: language = c++
22

3+
from libc.stdint cimport *
4+
from libcpp.vector cimport vector
5+
from cython.cimports.libcpp.string import string
36
from stfpy.stf_lib.stf_inst cimport STFInst
47

8+
ctypedef vector[string] StringVector
9+
ctypedef vector[string].const_iterator StringVectorIterator
10+
511
cdef extern from "stf_inst_reader.hpp" namespace "stf":
612
cdef cppclass STFInstReader:
713
cppclass iterator:
@@ -17,3 +23,6 @@ cdef extern from "stf_inst_reader.hpp" namespace "stf":
1723
void close()
1824
iterator begin()
1925
iterator end()
26+
uint32_t major()
27+
uint32_t minor()
28+
const StringVector& getHeaderCommentsString()

0 commit comments

Comments
 (0)