Class: Ext3::BlockPointersPath

Inherits:
Object
  • Object
show all
Defined in:
lib/fs/ext3/block_pointers_path.rb

Constant Summary collapse

DIRECT_SIZE =
12
SINGLE_INDIRECT_INDEX =
12
DOUBLE_INDIRECT_INDEX =
13
TRIPLE_INDIRECT_INDEX =
14
INDEX_TYPES =
[:direct, :single_indirect, :double_indirect, :triple_indirect]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(num_indirects, block = 0) ⇒ BlockPointersPath

Returns a new instance of BlockPointersPath.



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/fs/ext3/block_pointers_path.rb', line 12

def initialize(num_indirects, block = 0)
  @num_indirects = num_indirects
  @single_indirect_size = @num_indirects
  @double_indirect_size = @num_indirects**2
  @triple_indirect_size = @num_indirects**3

  @single_indirect_base_size = DIRECT_SIZE
  @double_indirect_base_size = DIRECT_SIZE + @single_indirect_size
  @triple_indirect_base_size = DIRECT_SIZE + @single_indirect_size + @double_indirect_size

  self.block = block
end

Instance Attribute Details

#blockObject

Returns the value of attribute block.



10
11
12
# File 'lib/fs/ext3/block_pointers_path.rb', line 10

def block
  @block
end

#num_indirectsObject (readonly)

Returns the value of attribute num_indirects.



10
11
12
# File 'lib/fs/ext3/block_pointers_path.rb', line 10

def num_indirects
  @num_indirects
end

#pathObject (readonly)

Returns the value of attribute path.



10
11
12
# File 'lib/fs/ext3/block_pointers_path.rb', line 10

def path
  @path
end

#path_indexObject (readonly)

Returns the value of attribute path_index.



10
11
12
# File 'lib/fs/ext3/block_pointers_path.rb', line 10

def path_index
  @path_index
end

Instance Method Details

#direct?Boolean

Returns:

  • (Boolean)


35
# File 'lib/fs/ext3/block_pointers_path.rb', line 35

def direct?;          @path_index == 0; end

#direct_indexObject



25
# File 'lib/fs/ext3/block_pointers_path.rb', line 25

def direct_index;          @path[0]; end

#double_indirect?Boolean

Returns:

  • (Boolean)


39
# File 'lib/fs/ext3/block_pointers_path.rb', line 39

def double_indirect?; @path_index == 2; end

#double_indirect_indexObject



29
# File 'lib/fs/ext3/block_pointers_path.rb', line 29

def double_indirect_index; @path[2]; end

#index_typeObject



33
# File 'lib/fs/ext3/block_pointers_path.rb', line 33

def index_type; INDEX_TYPES[@path_index]; end

#single_indirect?Boolean

Returns:

  • (Boolean)


37
# File 'lib/fs/ext3/block_pointers_path.rb', line 37

def single_indirect?; @path_index == 1; end

#single_indirect_indexObject



27
# File 'lib/fs/ext3/block_pointers_path.rb', line 27

def single_indirect_index; @path[1]; end

#succ!Object



48
49
50
51
52
# File 'lib/fs/ext3/block_pointers_path.rb', line 48

def succ!
  succ_index(@path_index)
  @block += 1
  self
end

#to_aObject



58
59
60
# File 'lib/fs/ext3/block_pointers_path.rb', line 58

def to_a
  @path.dup
end

#to_sObject



54
55
56
# File 'lib/fs/ext3/block_pointers_path.rb', line 54

def to_s
  @path.inspect
end

#triple_indirect?Boolean

Returns:

  • (Boolean)


41
# File 'lib/fs/ext3/block_pointers_path.rb', line 41

def triple_indirect?; @path_index == 3; end

#triple_indirect_indexObject



31
# File 'lib/fs/ext3/block_pointers_path.rb', line 31

def triple_indirect_index; @path[3]; end