Skip to content
This repository was archived by the owner on Jan 5, 2021. It is now read-only.

Commit 62f8754

Browse files
author
Loic Teixeira
committed
Add Assignment 07 Sources
1 parent 20a86da commit 62f8754

File tree

12 files changed

+1103
-0
lines changed

12 files changed

+1103
-0
lines changed

07_graph/lib/base.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class BasicObject
2+
NIX = ::Object.new
3+
4+
def nix
5+
return NIX
6+
end
7+
8+
def nix?
9+
return equal?(NIX)
10+
end
11+
12+
def checkcast(s)
13+
return self
14+
end
15+
end
16+
17+
class Class
18+
alias_method :__new__, :new
19+
20+
def nil
21+
return nil
22+
end
23+
end
24+
25+
class << self
26+
def each_manifest_name(dir)
27+
path = File.join(dir, "manifest.txt")
28+
lines = File.readlines(path)
29+
lines.each do |line|
30+
name = line.strip
31+
unless name.empty?
32+
yield name
33+
end
34+
end
35+
return
36+
end
37+
38+
def load_manifest(dir)
39+
each_manifest_name(dir) do |name|
40+
path = File.join(dir, "ruby", name)
41+
if File.exist?(path)
42+
load(path)
43+
end
44+
end
45+
return
46+
end
47+
48+
def load_parent_manifest(dir)
49+
load_manifest(File.dirname(dir))
50+
return
51+
end
52+
end

07_graph/lib/integer.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Bignum
2+
def size
3+
return super
4+
end
5+
end
6+
7+
class Fixnum
8+
def size
9+
return super
10+
end
11+
end
12+
13+
class Integer
14+
def hash
15+
return self
16+
end
17+
18+
def size
19+
raise NoMethodError.new("undefined method `size' for #{self.inspect}:Integer")
20+
end
21+
end

07_graph/lib/memory.rb

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
dir = File.dirname(File.expand_path(__FILE__))
2+
3+
require(File.join(dir, "base.rb"))
4+
5+
class Memory
6+
class Fault < Exception
7+
end
8+
9+
class << self
10+
def new(c, e = nix)
11+
if c < 0
12+
raise Fault.new("negative capacity: #{c}")
13+
end
14+
if e.nix?
15+
values = Array.new(c)
16+
else
17+
values = Array.new(c, e)
18+
end
19+
if block_given?
20+
c.times do |i|
21+
values[i] = yield(i)
22+
end
23+
end
24+
return Memory.__new__(values)
25+
end
26+
27+
def [](*values)
28+
return Memory.__new__(values)
29+
end
30+
end
31+
32+
def initialize(values)
33+
super()
34+
@values = values
35+
return
36+
end
37+
38+
def __assert_bounds(i)
39+
if i < 0 || i >= capacity
40+
raise Fault.new("index out of bounds for capacity #{capacity}: #{i}")
41+
end
42+
return
43+
end
44+
45+
def __get(i)
46+
return @values[i]
47+
end
48+
49+
def eql?(o)
50+
if o.is_a?(Memory)
51+
if capacity == o.capacity
52+
capacity.times do |i|
53+
unless @values[i].eql?(o.__get(i))
54+
return false
55+
end
56+
end
57+
return true
58+
end
59+
end
60+
return false
61+
end
62+
63+
def capacity
64+
return @values.size
65+
end
66+
67+
def [](i)
68+
__assert_bounds(i)
69+
return @values[i]
70+
end
71+
72+
def []=(i, e)
73+
__assert_bounds(i)
74+
@values[i] = e
75+
return
76+
end
77+
end

0 commit comments

Comments
 (0)