Module: EasySwig::HFilesManager

Defined in:
lib/tasks/hfiles_manager.rb

Class Method Summary collapse

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