@@ -1860,7 +1860,58 @@ impl StructureBuilder {
18601860 }
18611861 }
18621862
1863- // TODO : The other methods in the python version (type, members, remove, replace, etc)
1863+ pub fn members ( & self ) -> Array < StructureMember > {
1864+ let mut count = 0 ;
1865+ let members_raw = unsafe { BNGetStructureBuilderMembers ( self . handle , & mut count) } ;
1866+ unsafe { Array :: new ( members_raw, count, ( ) ) }
1867+ }
1868+
1869+ pub fn index_by_name ( & self , name : & str ) -> Option < usize > {
1870+ self . members ( ) . iter ( ) . position ( |member| member. name == name)
1871+ }
1872+
1873+ pub fn index_by_offset ( & self , offset : u64 ) -> Option < usize > {
1874+ self . members ( )
1875+ . iter ( )
1876+ . position ( |member| member. offset == offset)
1877+ }
1878+
1879+ // Setters
1880+
1881+ pub fn clear_members ( & self ) {
1882+ let len = self . members ( ) . len ( ) ;
1883+ for idx in ( 0 ..len) . rev ( ) {
1884+ self . remove ( idx)
1885+ }
1886+ }
1887+
1888+ pub fn add_members < ' a > ( & self , members : impl IntoIterator < Item = & ' a StructureMember > ) {
1889+ for member in members {
1890+ self . append ( & member. ty , & member. name , member. access , member. scope ) ;
1891+ }
1892+ }
1893+
1894+ pub fn set_members < ' a > ( & self , members : impl IntoIterator < Item = & ' a StructureMember > ) {
1895+ self . clear_members ( ) ;
1896+ self . add_members ( members) ;
1897+ }
1898+
1899+ pub fn remove ( & self , index : usize ) {
1900+ unsafe { BNRemoveStructureBuilderMember ( self . handle , index) }
1901+ }
1902+
1903+ pub fn replace ( & self , index : usize , type_ : Conf < & Type > , name : & str , overwrite : bool ) {
1904+ let name = name. into_bytes_with_nul ( ) ;
1905+ let name_ptr = name. as_ptr ( ) as * const _ ;
1906+
1907+ let raw_type_ = BNTypeWithConfidence {
1908+ type_ : type_. contents as * const Type as * mut _ ,
1909+ confidence : type_. confidence ,
1910+ } ;
1911+ unsafe {
1912+ BNReplaceStructureBuilderMember ( self . handle , index, & raw_type_, name_ptr, overwrite)
1913+ }
1914+ }
18641915}
18651916
18661917impl From < & Structure > for StructureBuilder {
@@ -2042,6 +2093,25 @@ impl StructureMember {
20422093 }
20432094}
20442095
2096+ impl CoreArrayProvider for StructureMember {
2097+ type Raw = BNStructureMember ;
2098+ type Context = ( ) ;
2099+ }
2100+
2101+ unsafe impl CoreOwnedArrayProvider for StructureMember {
2102+ unsafe fn free ( raw : * mut Self :: Raw , count : usize , _context : & Self :: Context ) {
2103+ BNFreeStructureMemberList ( raw, count)
2104+ }
2105+ }
2106+
2107+ unsafe impl < ' a > CoreArrayWrapper < ' a > for StructureMember {
2108+ type Wrapped = Guard < ' a , StructureMember > ;
2109+
2110+ unsafe fn wrap_raw ( raw : & ' a Self :: Raw , _context : & ' a Self :: Context ) -> Self :: Wrapped {
2111+ Guard :: new ( StructureMember :: from_raw ( * raw) , & ( ) )
2112+ }
2113+ }
2114+
20452115#[ derive( Debug , Clone ) ]
20462116pub struct InheritedStructureMember {
20472117 pub base : Ref < NamedTypeReference > ,
0 commit comments