We use C++ std::vector<T> when we need an array or a list.
The benefits of the std::vector<T>, are:
- C++ manages the memory for us. We don't need to allocate or free.
- The vector can grow as we do not need to allocate on advance.
In the following discussion we shall call:
- 'container' to the mapped class in scripts.
- 'element' to the C++ class, we use in the container.
SWIG does a special translation of std::vector<T> in a way which differs from one script language to another.
In addition, SWIG requires explicit announcement for the mapping.
Currently the follow std::vector<T> maps are announced in libptpmgmt.i:
| Class name in scripts | C++ std::vector<T> |
header |
|---|---|---|
| FaultRecord_v | FaultRecord_t | types.h |
| ClockIdentity_v | ClockIdentity_t | types.h |
| PortAddress_v | PortAddress_t | types.h |
| AcceptableMaster_v | AcceptableMaster_t | types.h |
| LinuxptpUnicastMaster_v | LinuxptpUnicastMaster_t | types.h |
| PtpEvent_v | PtpEvent_t | ptp.h |
| PtpSample_v | PtpSample_t | ptp.h |
| PtpSampleExt_v | PtpSampleExt_t | ptp.h |
| SigTime | SLAVE_RX_SYNC_TIMING_DATA_rec_t | sig.h |
| SigComp | SLAVE_RX_SYNC_COMPUTED_DATA_rec_t | sig.h |
| SigEvent | SLAVE_TX_EVENT_TIMESTAMPS_rec_t | sig.h |
| SigDelay | SLAVE_DELAY_TIMING_DATA_NP_rec_t | sig.h |
The container can be part of another class or structure.
For example std::vector<FaultRecord_t> is part of FAULT_LOG_t, the structure used for FAULT_LOG Managment TLV.
It could be an argument of a function.
For example std::vector<PtpEvent_t> is an argument of readEvents().
The allocation and release of both container and element are done in the same way we allocate other SWIG classes.
The container provides the following constructors, following std::vector<> constructors.
| # | result | argument 1 | argument 2 |
|---|---|---|---|
| 0 | empty | ||
| 1 | copy constructor | container | |
| 1 | insert default elements | number | |
| 2 | copies of element | number | element |
- PHP does not support the last 2 arguments constructor!
C++ are the methods of std::vector<>.
-NA- means method is not available.
Python and Ruby support more methods.
| C++ | Perl | PHP | Tcl | Go | Lua | Python | Ruby |
|---|---|---|---|---|---|---|---|
| size | size | size | size | Size | size | size | size |
| empty | empty | is_empty | empty | IsEmpty | empty | empty | empty? |
| clear | clear | clear | clear | Clear | clear | clear | clear |
| push_back | push | push | push | Add | push_back | push_back | push |
| back+pop_back | pop | pop | pop | -NA- | -NA- | pop | pop |
| back | -NA- | -NA- | -NA- | -NA- | back | back | back |
| pop_back | -NA- | -NA- | -NA- | -NA- | pop_back | pop_back | -NA- |
| front | -NA- | -NA- | -NA- | -NA- | front | front | front |
| [] | get | get | get | Get | [] | [] | [] |
| []= | set | set | set | Set | []= | []= | []= |
| capacity | -NA- | capacity | -NA- | Capacity | -NA- | capacity | capacity |
| reserve | -NA- | reserve | -NA- | Reserve | -NA- | reserve | reserve |
| max_size | -NA- | -NA- | -NA- | -NA- | max_size | -NA- | -NA- |
The container in Python acts as list, and in Ruby as array.
Perl, Lua, PHP, Tcl, and Go use only the methods declared in vecDef.h.
See doxygen documentation of vecDef.h for more details on the container methods.