Module ida_netnode

Namely, we use Btree. To learn more about BTree:

\link{https://en.wikipedia.org/wiki/B-tree}

We do not use Btree directly. Instead, we have another layer built on the top of Btree. Here is a brief explanation of this layer.

An object called "netnode" is modeled on the top of Btree. Each netnode has a unique id: a 32-bit value (64-bit for ida64). Initially there is a trivial mapping of the linear addresses used in the program to netnodes (later this mapping may be modified using ea2node and node2ea functions; this is used for fast database rebasings). If we have additional information about an address (for example, a comment is attached to it), this information is stored in the corresponding netnode. See nalt.hpp to see how the kernel uses netnodes. Also, some netnodes have no corresponding linear address (however, they still have an id). They are used to store information not related to a particular address.

Each netnode may have the following attributes:

  • a name: an arbitrary non-empty string, up to 255KB-1 bytes

  • a value: arbitrary sized object, max size is MAXSPECSIZE

  • altvals: a sparse array of 32-bit values. indexes in this array may be 8-bit or 32-bit values

  • supvals: an array of arbitrary sized objects. (size of each object is limited by MAXSPECSIZE) indexes in this array may be 8-bit or 32-bit values

  • charvals: a sparse array of 8-bit values. indexes in this array may be 8-bit or 32-bit values

  • hashvals: a hash (an associative array). indexes in this array are strings values are arbitrary sized (max size is MAXSPECSIZE)

Initially a new netnode contains no information at all so no disk space is used for it. As you add new information, the netnode grows.

All arrays that are attached to the netnode behave in the same manner. Initially:

  • all members of altvals/charvals array are zeroes

  • all members of supvals/hashvals array are undefined

If you need to store objects bigger that MAXSPECSIZE, please note that there are high-level functions to store arbitrary sized objects in supvals. See setblob/getblob and other blob-related functions.

You may use netnodes to store additional information about the program. Limitations on the use of netnodes are the following:

  • use netnodes only if you could not find a kernel service to store your type of information

  • do not create netnodes with valid identifier names. Use the "$ " prefix (or any other prefix with characters not allowed in the identifiers for the names of your netnodes. Although you will probably not destroy anything by accident, using already defined names for the names of your netnodes is still discouraged.

  • you may create as many netnodes as you want (creation of an unnamed netnode does not increase the size of the database). however, since each netnode has a number, creating too many netnodes could lead to the exhaustion of the netnode numbers (the numbering starts at 0xFF000000)

  • remember that netnodes are automatically saved to the disk by the kernel.

Advanced info:

In fact a netnode may contain up to 256 arrays of arbitrary sized objects (not only the 4 listed above). Each array has an 8-bit tag. Usually tags are represented by character constants. For example, altvals and supvals are simply 2 of 256 arrays, with the tags 'A' and 'S' respectively.

Global Variables

BADNODE

BADNODE = 18446744073709551615

MAXNAMESIZE

MAXNAMESIZE = 512

MAXSPECSIZE

MAXSPECSIZE = 1024

MAX_NODENAME_SIZE

MAX_NODENAME_SIZE = 32768

NETMAP_IDX

NETMAP_IDX = 256

NETMAP_STR

NETMAP_STR = 1024

NETMAP_V8

NETMAP_V8 = 4096

NETMAP_VAL

NETMAP_VAL = 512

NETMAP_VAL_NDX

NETMAP_VAL_NDX = 8192

NETMAP_X8

NETMAP_X8 = 2048

SIZEOF_nodeidx_t

SIZEOF_nodeidx_t = 8

atag

atag = 65

htag

htag = 72

ltag

ltag = 76

ntag

ntag = 78

stag

stag = 83

vtag

vtag = 86

Functions

exist(n: netnode) ‑> bool

exist(n) -> bool

n: netnode const &

netnode_exist(_name: char const *) ‑> bool

exist(_name) -> bool Does the netnode with the specified name exist?

_name: (C++: const char *) char const *

Classes

netnode(*args)

: Proxy of C++ netnode class.

__init__(self, num=nodeidx_t(-1)) -> netnode

 num: nodeidx_t

__init__(self, _name, namlen=0, do_create=False) -> netnode

 _name: char const *
 namlen: size_t
 do_create: bool

Static methods

  • exist(_name: char const *) ‑> bool exist(_name) -> bool Does the netnode with the specified name exist?

    _name: (C++: const char *) char const *


Methods

  • altdel(self, *args) ‑> bool altdel(self, alt, tag=atag) -> bool Delete all elements of altval array. This function may be applied to 32-bit and 8-bit altval arrays. This function deletes the whole altval array.

    alt: nodeidx_t tag: uchar

    return: success altdel(self) -> bool


  • altdel_all(self, *args) ‑> bool altdel_all(self, tag=atag) -> bool Delete all elements of the specified altval array. This function may be applied to 32-bit and 8-bit altval arrays. This function deletes the whole altval array.

    tag: (C++: uchar) tag of array return: success


  • altdel_ea(self, *args) ‑> bool altdel_ea(self, ea, tag=atag) -> bool

    ea: ea_t tag: uchar


  • altdel_idx8(self, alt: uchar, tag: uchar) ‑> bool altdel_idx8(self, alt, tag) -> bool

    alt: uchar tag: uchar


  • altfirst(self, *args) ‑> nodeidx_t altfirst(self, tag=atag) -> nodeidx_t Get first existing element of altval array.

    tag: (C++: uchar) tag of array return: index of first existing element of altval array, BADNODE if altval array is empty


  • altfirst_idx8(self, tag: uchar) ‑> nodeidx_t altfirst_idx8(self, tag) -> nodeidx_t

    tag: uchar


  • altlast(self, *args) ‑> nodeidx_t altlast(self, tag=atag) -> nodeidx_t Get last element of altval array.

    tag: (C++: uchar) tag of array return: index of last existing element of altval array, BADNODE if altval array is empty


  • altlast_idx8(self, tag: uchar) ‑> nodeidx_t altlast_idx8(self, tag) -> nodeidx_t

    tag: uchar


  • altnext(self, *args) ‑> nodeidx_t altnext(self, cur, tag=atag) -> nodeidx_t Get next existing element of altval array.

    cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the next existing element of altval array, BADNODE if no more altval array elements exist


  • altnext_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t altnext_idx8(self, cur, tag) -> nodeidx_t

    cur: uchar tag: uchar


  • altprev(self, *args) ‑> nodeidx_t altprev(self, cur, tag=atag) -> nodeidx_t Get previous existing element of altval array.

    cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the previous existing element of altval array, BADNODE if no more altval array elements exist


  • altprev_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t altprev_idx8(self, cur, tag) -> nodeidx_t

    cur: uchar tag: uchar


  • altset(self, *args) ‑> bool altset(self, alt, value, tag=atag) -> bool Set value of altval array.

    alt: (C++: nodeidx_t) index into array of altvals value: (C++: nodeidx_t) new value of altval element tag: (C++: uchar) tag of array retval 1: ok retval 0: failed, normally should not occur


  • altset_ea(self, *args) ‑> bool altset_ea(self, ea, value, tag=atag) -> bool

    ea: ea_t value: nodeidx_t tag: uchar


  • altset_idx8(self, alt: uchar, val: nodeidx_t, tag: uchar) ‑> bool altset_idx8(self, alt, val, tag) -> bool

    alt: uchar val: nodeidx_t tag: uchar


  • altshift(self, *args) ‑> size_t altshift(self, _from, to, size, tag=atag) -> size_t Shift the altval array elements. Moves the array elements at (from..from+size) to (to..to+size)

    from: (C++: nodeidx_t) to: (C++: nodeidx_t) size: (C++: nodeidx_t) tag: (C++: uchar) return: number of shifted elements


  • altval(self, *args) ‑> nodeidx_t altval(self, alt, tag=atag) -> nodeidx_t Get altval element of the specified array.

    alt: (C++: nodeidx_t) index into array of altvals tag: (C++: uchar) tag of array. may be omitted return: value of altval element. nonexistent altval members are returned as zeroes


  • altval_ea(self, *args) ‑> nodeidx_t altval_ea(self, ea, tag=atag) -> nodeidx_t

    ea: ea_t tag: uchar


  • altval_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t altval_idx8(self, alt, tag) -> nodeidx_t

    alt: uchar tag: uchar


  • blobshift(self, _from: nodeidx_t, to: nodeidx_t, size: nodeidx_t, tag: uchar) ‑> size_t blobshift(self, _from, to, size, tag) -> size_t Shift the blob array elements. Moves the array elements at (from..from+size) to (to..to+size)

    from: (C++: nodeidx_t) to: (C++: nodeidx_t) size: (C++: nodeidx_t) tag: (C++: uchar) return: number of shifted elements


  • blobsize(self, _start: nodeidx_t, tag: uchar) ‑> size_t blobsize(self, _start, tag) -> size_t Get size of blob.

    _start: (C++: nodeidx_t) index of the first supval element used to store blob tag: (C++: uchar) tag of supval array return: number of bytes required to store a blob


  • blobsize_ea(self, ea: ea_t, tag: uchar) ‑> size_t blobsize_ea(self, ea, tag) -> size_t

    ea: ea_t tag: uchar


  • chardel(self, alt: nodeidx_t, tag: uchar) ‑> bool chardel(self, alt, tag) -> bool

    alt: nodeidx_t tag: uchar


  • chardel_ea(self, ea: ea_t, tag: uchar) ‑> bool chardel_ea(self, ea, tag) -> bool

    ea: ea_t tag: uchar


  • chardel_idx8(self, alt: uchar, tag: uchar) ‑> bool chardel_idx8(self, alt, tag) -> bool

    alt: uchar tag: uchar


  • charfirst(self, tag: uchar) ‑> nodeidx_t charfirst(self, tag) -> nodeidx_t

    tag: uchar


  • charfirst_idx8(self, tag: uchar) ‑> nodeidx_t charfirst_idx8(self, tag) -> nodeidx_t

    tag: uchar


  • charlast(self, tag: uchar) ‑> nodeidx_t charlast(self, tag) -> nodeidx_t

    tag: uchar


  • charlast_idx8(self, tag: uchar) ‑> nodeidx_t charlast_idx8(self, tag) -> nodeidx_t

    tag: uchar


  • charnext(self, cur: nodeidx_t, tag: uchar) ‑> nodeidx_t charnext(self, cur, tag) -> nodeidx_t

    cur: nodeidx_t tag: uchar


  • charnext_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t charnext_idx8(self, cur, tag) -> nodeidx_t

    cur: uchar tag: uchar


  • charprev(self, cur: nodeidx_t, tag: uchar) ‑> nodeidx_t charprev(self, cur, tag) -> nodeidx_t

    cur: nodeidx_t tag: uchar


  • charprev_idx8(self, cur: uchar, tag: uchar) ‑> nodeidx_t charprev_idx8(self, cur, tag) -> nodeidx_t

    cur: uchar tag: uchar


  • charset(self, alt: nodeidx_t, val: uchar, tag: uchar) ‑> bool charset(self, alt, val, tag) -> bool

    alt: nodeidx_t val: uchar tag: uchar


  • charset_ea(self, ea: ea_t, val: uchar, tag: uchar) ‑> bool charset_ea(self, ea, val, tag) -> bool

    ea: ea_t val: uchar tag: uchar


  • charset_idx8(self, alt: uchar, val: uchar, tag: uchar) ‑> bool charset_idx8(self, alt, val, tag) -> bool

    alt: uchar val: uchar tag: uchar


  • charshift(self, _from: nodeidx_t, to: nodeidx_t, size: nodeidx_t, tag: uchar) ‑> size_t charshift(self, _from, to, size, tag) -> size_t

    from: nodeidx_t to: nodeidx_t size: nodeidx_t tag: uchar


  • charval(self, alt: nodeidx_t, tag: uchar) ‑> uchar charval(self, alt, tag) -> uchar

    alt: nodeidx_t tag: uchar


  • charval_ea(self, ea: ea_t, tag: uchar) ‑> uchar charval_ea(self, ea, tag) -> uchar

    ea: ea_t tag: uchar


  • charval_idx8(self, alt: uchar, tag: uchar) ‑> uchar charval_idx8(self, alt, tag) -> uchar

    alt: uchar tag: uchar


  • copyto(self, destnode: netnode, count: nodeidx_t = 1) ‑> size_t copyto(self, destnode, count=1) -> size_t

    destnode: netnode count: nodeidx_t


  • create(self, *args) ‑> bool create(self, _name, namlen=0) -> bool Create unnamed netnode. retval 1: ok retval 0: should not happen, indicates internal error

    _name: char const * namlen: size_t

    create(self) -> bool


  • delblob(self, _start: nodeidx_t, tag: uchar) ‑> int delblob(self, _start, tag) -> int Delete a blob.

    _start: (C++: nodeidx_t) index of the first supval element used to store blob tag: (C++: uchar) tag of supval array return: number of deleted supvals


  • delblob_ea(self, ea: ea_t, tag: uchar) ‑> int delblob_ea(self, ea, tag) -> int

    ea: ea_t tag: uchar


  • delvalue(self) ‑> bool delvalue(self) -> bool Delete value of netnode. retval 1: ok retval 0: failed, netnode is bad or other error


  • eadel(self, ea: ea_t, tag: uchar) ‑> bool eadel(self, ea, tag) -> bool

    ea: ea_t tag: uchar


  • eadel_idx8(self, idx: uchar, tag: uchar) ‑> bool eadel_idx8(self, idx, tag) -> bool

    idx: uchar tag: uchar


  • eaget(self, ea: ea_t, tag: uchar) ‑> ea_t eaget(self, ea, tag) -> ea_t

    ea: ea_t tag: uchar


  • eaget_idx(self, idx: nodeidx_t, tag: uchar) ‑> ea_t eaget_idx(self, idx, tag) -> ea_t

    idx: nodeidx_t tag: uchar


  • eaget_idx8(self, idx: uchar, tag: uchar) ‑> ea_t eaget_idx8(self, idx, tag) -> ea_t

    idx: uchar tag: uchar


  • easet(self, ea: ea_t, addr: ea_t, tag: uchar) ‑> bool easet(self, ea, addr, tag) -> bool Store/retrieve/delete an address value in the netnode that corresponds to an address.

    ea: (C++: ea_t) addr: (C++: ea_t) tag: (C++: uchar)


  • easet_idx(self, idx: nodeidx_t, addr: ea_t, tag: uchar) ‑> bool easet_idx(self, idx, addr, tag) -> bool

    idx: nodeidx_t addr: ea_t tag: uchar


  • easet_idx8(self, idx: uchar, addr: ea_t, tag: uchar) ‑> bool easet_idx8(self, idx, addr, tag) -> bool

    idx: uchar addr: ea_t tag: uchar


  • end(self) ‑> bool end(self) -> bool Get last netnode in the graph. Sets netnodenumber to the highest existing number. retval true: ok retval false: graph is empty


  • get_name(self) ‑> ssize_t get_name(self) -> ssize_t Get the netnode name.

    return: -1 if netnode is unnamed (buf is untouched in this case), otherwise the name length


  • getblob(self, start: nodeidx_t, tag: char) ‑> PyObject getblob(self, start, tag) -> bytes or None Get blob from a netnode into a qstring and make sure the string is null- terminated.

    start: nodeidx_t tag: (C++: uchar) tag of supval array return: -1 if blob doesn't exist size of string (including terminating null) otherwise


  • getblob_ea(self, ea: ea_t, tag: char) ‑> PyObject * getblob_ea(self, ea, tag) -> PyObject *

    ea: ea_t tag: char


  • getclob(self, start: nodeidx_t, tag: char) ‑> PyObject * getclob(self, start, tag) -> str

    start: nodeidx_t tag: char


  • hashdel(self, *args) ‑> bool hashdel(self, idx, tag=htag) -> bool Delete hash element.

    idx: (C++: const char *) index into hash tag: (C++: uchar) tag of hash. Default: htag retval true: deleted retval false: element does not exist


  • hashdel_all(self, *args) ‑> bool hashdel_all(self, tag=htag) -> bool Delete all elements of hash. This function deletes the whole hash.

    tag: (C++: uchar) tag of hash. Default: htag return: success


  • hashfirst(self, *args) ‑> ssize_t hashfirst(self, tag=htag) -> ssize_t @see: hashfirst(qstring *buf, uchar tag=htag) const

    tag: (C++: uchar)


  • hashlast(self, *args) ‑> ssize_t hashlast(self, tag=htag) -> ssize_t @see: hashlast(qstring *buf, uchar tag=htag) const

    tag: (C++: uchar)


  • hashnext(self, *args) ‑> ssize_t hashnext(self, idx, tag=htag) -> ssize_t @see: hashnext(qstring *buf, const char *idx, uchar tag=htag) const

    idx: (C++: const char *) char const * tag: (C++: uchar)


  • hashprev(self, *args) ‑> ssize_t hashprev(self, idx, tag=htag) -> ssize_t @see: hashprev(qstring *buf, const char *idx, uchar tag=htag) const

    idx: (C++: const char *) char const * tag: (C++: uchar)


  • hashset(self, *args) ‑> bool hashset(self, idx, value, tag=htag) -> bool Set value of hash element to long value.

    idx: (C++: const char *) index into hash value: (C++: nodeidx_t) new value of hash element tag: (C++: uchar) tag of hash. Default: htag retval 1: ok retval 0: should not occur - indicates internal error


  • hashset_buf(self, *args) ‑> bool hashset_buf(self, idx, py_str, tag=htag) -> bool

    idx: char const * py_str: PyObject * tag: char


  • hashset_idx(self, *args) ‑> bool hashset_idx(self, idx, value, tag=htag) -> bool

    idx: char const * value: nodeidx_t tag: uchar


  • hashstr(self, *args) ‑> ssize_t hashstr(self, idx, tag=htag) -> ssize_t @see: hashstr(qstring *buf, const char *idx, uchar tag=htag) const

    idx: (C++: const char *) char const * tag: (C++: uchar)


  • hashstr_buf(self, *args) ‑> PyObject * hashstr_buf(self, idx, tag=htag) -> PyObject

    idx: char const * tag: char


  • hashval(self, *args) ‑> ssize_t hashval(self, idx, tag=htag) -> ssize_t Get value of the specified hash element.

    idx: (C++: const char *) index into hash tag: (C++: uchar) tag of hash. Default: htag return: -1 if element doesn't exist or idx is nullptr. otherwise returns the value size in bytes


  • hashval_long(self, *args) ‑> nodeidx_t hashval_long(self, idx, tag=htag) -> nodeidx_t Get value of the specified hash element.

    idx: (C++: const char *) index into hash tag: (C++: uchar) tag of hash. Default: htag return: value of hash element (it should be set using hashset(nodeidx_t)), 0 if the element does not exist


  • index(self) ‑> nodeidx_t index(self) -> nodeidx_t


  • kill(self) ‑> void kill(self) Delete a netnode with all information attached to it.


  • long_value(self) ‑> nodeidx_t long_value(self) -> nodeidx_t


  • lower_bound(self, *args) ‑> nodeidx_t lower_bound(self, cur, tag=stag) -> nodeidx_t Get lower bound of existing elements of supval array.

    cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of first existing element of supval array >= cur BADNODE if supval array is empty


  • lower_bound_ea(self, *args) ‑> nodeidx_t lower_bound_ea(self, ea, tag=stag) -> nodeidx_t

    ea: ea_t tag: uchar


  • lower_bound_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t lower_bound_idx8(self, alt, tag) -> nodeidx_t

    alt: uchar tag: uchar


  • moveto(self, destnode: netnode, count: nodeidx_t = 1) ‑> size_t moveto(self, destnode, count=1) -> size_t

    destnode: netnode count: nodeidx_t


  • next(self) ‑> bool next(self) -> bool Get next netnode in the graph. Sets netnodenumber to the next existing number retval true: ok retval false: no more netnodes


  • prev(self) ‑> bool prev(self) -> bool Get prev netnode in the graph. Sets netnodenumber to the previous existing number retval true: ok retval false: no more netnodes


  • rename(self, newname: char const *, namlen: size_t = 0) ‑> bool rename(self, newname, namlen=0) -> bool Rename a netnode.

    newname: (C++: const char *) new name of netnode. nullptr or "" means to delete name. names of user-defined netnodes must have the "$ " prefix in order to avoid clashes with program byte names. namlen: (C++: size_t) length of new name. if not specified, it will be calculated using strlen() retval 1: ok retval 0: failed, newname is already used


  • set(self, value: void const *) ‑> bool set(self, value) -> bool Set value of netnode.

    value: (C++: const void *) pointer to value return: 1 - ok


  • set_long(self, x: nodeidx_t) ‑> bool set_long(self, x) -> bool Value of netnode as a long number:

    x: (C++: nodeidx_t)


  • setblob(self, buf: void const *, _start: nodeidx_t, tag: uchar) ‑> bool setblob(self, buf, _start, tag) -> bool Store a blob in a netnode.

    buf: (C++: const void *) pointer to blob to save _start: (C++: nodeidx_t) tag: (C++: uchar) tag of supval array return: success


  • setblob_ea(self, buf: void const *, ea: ea_t, tag: uchar) ‑> bool setblob_ea(self, buf, ea, tag) -> bool

    buf: void const * ea: ea_t tag: uchar


  • start(self) ‑> bool start(self) -> bool Get first netnode in the graph. Sets netnodenumber to the lowest existing number. retval true: ok retval false: graph is empty


  • supdel(self, *args) ‑> bool supdel(self, alt, tag=stag) -> bool Delete all elements of supval array. This function may be applied to 32-bit and 8-bit supval arrays. This function deletes the whole supval array.

    alt: nodeidx_t tag: uchar

    return: success supdel(self) -> bool


  • supdel_all(self, tag: uchar) ‑> bool supdel_all(self, tag) -> bool Delete all elements of the specified supval array. This function may be applied to 32-bit and 8-bit supval arrays. This function deletes the whole supval array.

    tag: (C++: uchar) return: success


  • supdel_ea(self, *args) ‑> bool supdel_ea(self, ea, tag=stag) -> bool

    ea: ea_t tag: uchar


  • supdel_idx8(self, alt: uchar, tag: uchar) ‑> bool supdel_idx8(self, alt, tag) -> bool

    alt: uchar tag: uchar


  • supdel_range(self, idx1: nodeidx_t, idx2: nodeidx_t, tag: uchar) ‑> int supdel_range(self, idx1, idx2, tag) -> int Delete range of elements in the specified supval array. Elements in range [idx1, idx2) will be deleted. note: This function can also be used to delete a range of altval elements

    idx1: (C++: nodeidx_t) first element to delete idx2: (C++: nodeidx_t) last element to delete + 1 tag: (C++: uchar) tag of array return: number of deleted elements


  • supdel_range_idx8(self, idx1: uchar, idx2: uchar, tag: uchar) ‑> int supdel_range_idx8(self, idx1, idx2, tag) -> int Same as above, but accepts 8-bit indexes.

    idx1: (C++: uchar) idx2: (C++: uchar) tag: (C++: uchar)


  • supfirst(self, *args) ‑> nodeidx_t supfirst(self, tag=stag) -> nodeidx_t Get first existing element of supval array.

    tag: (C++: uchar) tag of array return: index of first existing element of supval array, BADNODE if supval array is empty


  • supfirst_idx8(self, tag: uchar) ‑> nodeidx_t supfirst_idx8(self, tag) -> nodeidx_t

    tag: uchar


  • suplast(self, *args) ‑> nodeidx_t suplast(self, tag=stag) -> nodeidx_t Get last existing element of supval array.

    tag: (C++: uchar) tag of array return: index of last existing element of supval array, BADNODE if supval array is empty


  • suplast_idx8(self, tag: uchar) ‑> nodeidx_t suplast_idx8(self, tag) -> nodeidx_t

    tag: uchar


  • supnext(self, *args) ‑> nodeidx_t supnext(self, cur, tag=stag) -> nodeidx_t Get next existing element of supval array.

    cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the next existing element of supval array, BADNODE if no more supval array elements exist


  • supnext_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t supnext_idx8(self, alt, tag) -> nodeidx_t

    alt: uchar tag: uchar


  • supprev(self, *args) ‑> nodeidx_t supprev(self, cur, tag=stag) -> nodeidx_t Get previous existing element of supval array.

    cur: (C++: nodeidx_t) current index tag: (C++: uchar) tag of array return: index of the previous existing element of supval array BADNODE if no more supval array elements exist


  • supprev_idx8(self, alt: uchar, tag: uchar) ‑> nodeidx_t supprev_idx8(self, alt, tag) -> nodeidx_t

    alt: uchar tag: uchar


  • supset(self, *args) ‑> bool supset(self, alt, value, tag=stag) -> bool Set value of supval array element.

    alt: (C++: nodeidx_t) index into array of supvals value: (C++: const void *) pointer to supval value tag: (C++: uchar) tag of array retval 1: ok retval 0: should not occur - indicates internal error


  • supset_ea(self, *args) ‑> bool supset_ea(self, ea, value, tag=stag) -> bool

    ea: ea_t value: void const * tag: uchar


  • supset_idx8(self, alt: uchar, value: void const *, tag: uchar) ‑> bool supset_idx8(self, alt, value, tag) -> bool

    alt: uchar value: void const * tag: uchar


  • supshift(self, *args) ‑> size_t supshift(self, _from, to, size, tag=stag) -> size_t Shift the supval array elements. Moves the array elements at (from..from+size) to (to..to+size)

    from: (C++: nodeidx_t) to: (C++: nodeidx_t) size: (C++: nodeidx_t) tag: (C++: uchar) return: number of shifted elements


  • supstr(self, *args) ‑> ssize_t supstr(self, alt, tag=stag) -> ssize_t @see: supstr(qstring *buf, nodeidx_t alt, uchar tag=stag) const

    alt: (C++: nodeidx_t) tag: (C++: uchar)


  • supstr_ea(self, *args) ‑> ssize_t supstr_ea(self, ea, tag=stag) -> ssize_t

    ea: ea_t tag: uchar


  • supstr_idx8(self, alt: uchar, tag: uchar) ‑> ssize_t supstr_idx8(self, alt, tag) -> ssize_t

    alt: uchar tag: uchar


  • supval(self, *args) ‑> ssize_t supval(self, alt, tag=stag) -> ssize_t Get value of the specified supval array element. NB: do not use this function to retrieve strings, see supstr()!

    alt: (C++: nodeidx_t) index into array of supvals tag: (C++: uchar) tag of array. Default: stag return: size of value, -1 if element doesn't exist


  • supval_ea(self, *args) ‑> ssize_t supval_ea(self, ea, tag=stag) -> ssize_t

    ea: ea_t tag: uchar


  • supval_idx8(self, *args) ‑> ssize_t supval_idx8(self, alt, tag) -> ssize_t

    alt: uchar tag: uchar


  • valobj(self, *args) ‑> ssize_t valobj(self) -> ssize_t Get value of netnode. Netnode values are arbitrary sized objects with max size is MAXSPECSIZE. NB: do not use this function for strings - see valstr().

    return: length of value, -1 if no value present


  • valstr(self) ‑> ssize_t valstr(self) -> ssize_t @see: valstr(qstring *buf) const


  • value_exists(self) ‑> bool value_exists(self) -> bool


Last updated