code: def get_memberdef_nodes_and_signatures(self, node, kind):
          
          sig_dict = {}
          sig_prefix = ''
          if kind in ('file', 'namespace'):
              ns_node = node.getElementsByTagName('innernamespace')
              if not ns_node and kind == 'namespace':
                  ns_node = node.getElementsByTagName('compoundname')
              if ns_node:
                  sig_prefix = self.extract_text(ns_node[0]) + '::'
          elif kind in ('class', 'struct'):
              # Get the full function name.
              cn_node = node.getElementsByTagName('compoundname')
              sig_prefix = self.extract_text(cn_node[0]) + '::'
  
          md_nodes = self.get_specific_subnodes(node, 'memberdef', recursive=2)
          for n in md_nodes:
              if n.attributes['prot'].value != 'public':
                  continue
              if n.attributes['kind'].value in ['variable', 'typedef']:
                  continue
              if not self.get_specific_subnodes(n, 'definition'):
                  continue
              name = self.extract_text(self.get_specific_subnodes(n, 'name'))
              if name[:8] == 'operator':
                  continue
              sig = sig_prefix + name
              if sig in sig_dict:
                  sig_dict[sig].append(n)
              else:
                  sig_dict[sig] = [n]
          return sig_dict
docs: Collects the memberdef nodes and corresponding signatures that
          correspond to public function entries that are at most depth 2 deeper
          than the current (compounddef) node. Returns a dictionary with 
          function signatures (what swig expects after the %feature directive)
          as keys, and a list of corresponding memberdef nodes as values.