Class: Pione::PNML::Reader

Inherits:
Object
  • Object
show all
Defined in:
lib/pione/pnml/reader.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(src) ⇒ Reader

Returns a new instance of Reader.



12
13
14
# File 'lib/pione/pnml/reader.rb', line 12

def initialize(src)
  @doc = REXML::Document.new(src)
end

Class Method Details

.read(location) ⇒ Object

Read a PNML file at the location and return PNML::Net.

Parameters:



8
9
10
# File 'lib/pione/pnml/reader.rb', line 8

def self.read(location)
  new(location.read).read
end

Instance Method Details

#find_arcs(doc, net) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/pione/pnml/reader.rb', line 41

def find_arcs(doc, net)
  REXML::XPath.match(doc, "/pnml/net/arc").map do |elt|
    id = elt.attribute("id").value
    source_id = elt.attribute("source").value # source place(data) id
    target_id = elt.attribute("target").value # target transition(rule) id
    Arc.new(net, id, source_id, target_id)
  end
end

#find_places(doc, net) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/pione/pnml/reader.rb', line 33

def find_places(doc, net)
  REXML::XPath.match(doc, "/pnml/net/place").map do |elt|
    id = elt.attribute("id").value
    name = REXML::XPath.first(elt, "name/text").texts.map{|text| text.value}.join("")
    Place.new(net, id, name)
  end
end

#find_transitions(doc, net) ⇒ Object

Find all transtions in the document.



25
26
27
28
29
30
31
# File 'lib/pione/pnml/reader.rb', line 25

def find_transitions(doc, net)
  REXML::XPath.match(doc, "/pnml/net/transition").map do |elt|
    id = elt.attribute("id").value
    name = REXML::XPath.first(elt, "name/text").texts.map{|text| text.value}.join("")
    Transition.new(net, id, name)
  end
end

#readObject



16
17
18
19
20
21
22
# File 'lib/pione/pnml/reader.rb', line 16

def read
  Net.new.tap do |net|
    net.transitions = find_transitions(@doc, net)
    net.places = find_places(@doc, net)
    net.arcs = find_arcs(@doc, net)
  end
end