Module: EasySwig::HFilesManager
- Defined in:
- lib/tasks/hfiles_manager.rb
Class Method Summary collapse
- .assoc_headers(api_node) ⇒ Object
- .compare(fx, fy, files_set) ⇒ Object
- .num_included_by(file, files_set) ⇒ Object
- .num_includes(file, files_set) ⇒ Object
- .sort_headers(files) ⇒ Object
Class Method Details
.assoc_headers(api_node) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/tasks/hfiles_manager.rb', line 6 def assoc_headers(api_node) api_nodes = api_node.api_nodes hfile_hash = Hash.new api_nodes.each { |api_n| hfile = api_n.file next if hfile.nil? filename = hfile.name if hfile_hash[filename] == nil params = {'node_type' => 'file', 'features' => api_n.features } hfile_hash[filename] = IncFile.new(params).assoc_with_node(hfile) hfile_hash[filename].assoc_inner_node(api_node) end api_n.header_file = hfile_hash[filename] hfile_hash[filename].assoc_inner_node(api_n) } hfile_hash.each_value { |f| f.ignore_inner_nodes puts f.name } hfiles = hfile_hash.values hfiles end |
.compare(fx, fy, files_set) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/tasks/hfiles_manager.rb', line 64 def compare(fx, fy, files_set) num_incl_by_fx = num_included_by(fx, files_set) num_incl_by_fy = num_included_by(fy, files_set) num_incl_fx = num_includes(fx, files_set) num_incl_fy = num_includes(fy, files_set) if num_incl_by_fx == 0 && num_incl_by_fy == 0 return num_incl_fy <=> num_incl_fx end return -1 if num_incl_by_fx == 0 return 1 if num_incl_by_fy == 0 return (num_incl_fy - num_incl_by_fy) <=> (num_incl_fx - num_incl_by_fx) end |
.num_included_by(file, files_set) ⇒ Object
81 82 83 |
# File 'lib/tasks/hfiles_manager.rb', line 81 def num_included_by(file, files_set) file.files_including.map { |f| f.name }.select{ |f| files_set.include?(f) }.size end |
.num_includes(file, files_set) ⇒ Object
77 78 79 |
# File 'lib/tasks/hfiles_manager.rb', line 77 def num_includes(file, files_set) file.files_included.map { |f| f.name }.select { |f| files_set.include?(f) }.size end |
.sort_headers(files) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/tasks/hfiles_manager.rb', line 34 def sort_headers(files) sorted = [] includes = {} while true break if files.empty? files_aux = files.map { |f| f.name } files = files.sort { |fx,fy| compare(fx, fy, files_aux) } includes = {} while true f = files.shift break if f.nil? incs = f.files_included.map { |x| x.name } t1 = files.select { |h| incs.include?(h.name) } t2 = sorted.select { |h| incs.include?(h.name) } t2.select! { |h| compare(h, f, files_aux) > 0} includes[f] = t1 includes[f] << t2.flatten t1.each { |v| files.delete(v) } t2.each { |v| sorted.delete(v) } files -= includes[f] end sorted.push(*includes.keys) files = includes.values.flatten end sorted.reverse end |