Class: Word

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
src/word.rb

Overview

Representa las palabras en base 2.

Constant Summary

BASE =

Base binaria.

2

Instance Method Summary collapse

Constructor Details

#initialize(param, size = nil) ⇒ Word

Genera una palabra.

Parameters:

  • param (Integer, Word, Array<Integer, Word>)

    objecto que se convertira en una palabra.

  • size (Integer) (defaults to: nil)

    tamaño del Word.

Raises:

  • (ArgumentError)

    si la clase de param es inválida.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'src/word.rb', line 14

def initialize(param, size = nil)
  case param
  when Integer
    @size = size || 8
    @n = param
  when Array
    @size = size || param.sum(&:size)
    @n = param.reverse.inject do |acu, i|
      i.to_word + acu
    end.to_i
  when Word
    @size = size || param.size
    @n = param.to_i
  end

  @n %= BASE**@size
end

Instance Method Details

#&(word) ⇒ Word Also known as:

Devuelve un and de dos palabras.

Parameters:

  • word (Word)

    palabra con la que se va a realizar el and.

Returns:

  • (Word)

    resultado de and.



62
63
64
# File 'src/word.rb', line 62

def &(word)
  Word.new(@n & word.to_i, @size)
end

#+(word) ⇒ Word

Concatena dos palabras.

Parameters:

  • word (Word)

    palabra que se va a concatenar a la derecha.

Returns:

  • (Word)

    palabras concatenadas.



41
42
43
# File 'src/word.rb', line 41

def +(word)
  Word.new((@n << word.size) + word.to_i, @size + word.size)
end

#<<(value) ⇒ Word Also known as:

Desplaza bits hacia la izquierda.

Parameters:

  • value (Numeric)

    cantidad de bits a desplazar.

Returns:

  • (Word)

    resultado del desplazamiento.



69
70
71
# File 'src/word.rb', line 69

def <<(value)
  Word.new(@n << value.to_i, @size)
end

#<=>(word) ⇒ -1, ...

Compara la palabra con otra palabra.

Parameters:

  • word (Word)

    palabra con la que se va a comparar.

Returns:

  • (-1, 0, 1)

    resultado de la comparación.



133
134
135
136
137
# File 'src/word.rb', line 133

def <=>(word)
  return @size <=> word.size unless @size == word.size

  @n <=> word.to_i
end

#>>(value) ⇒ Word Also known as:

Desplaza bits hacia la derecha.

Parameters:

  • value (Numeric)

    cantidad de bits a desplazar.

Returns:

  • (Word)

    resultado de haber rotado la palabra.



76
77
78
# File 'src/word.rb', line 76

def >>(value)
  Word.new(@n >> value.to_i, @size)
end

#^(value) ⇒ Word Also known as:

Devuelve un xor de dos palabras.

Parameters:

  • value (Word)

    palabra con la que se va a realizar el xor.

Returns:

  • (Word)

    resultado de xor.



48
49
50
# File 'src/word.rb', line 48

def ^(value)
  Word.new(@n ^ value.to_i, @size)
end

#inspectObject

Inspecciona la palabra.



140
141
142
# File 'src/word.rb', line 140

def inspect
  to_s
end

#partition(value) ⇒ Array<Word>

Devuelve una partición de la palabra.

Parameters:

  • value (Numeric)

    cantidad de particiones.

Returns:

  • (Array<Word>)

    particiones.



97
98
99
100
101
102
103
104
# File 'src/word.rb', line 97

def partition(value)
  new_size = @size / value
  last_index = value - 1

  (0..last_index).map do |i|
    Word.new(@n >> (new_size * (last_index - i)), new_size)
  end
end

#sizeNumeric

Devuelve el tamaño de la palabra.

Returns:

  • (Numeric)

    tamaño de la palabra.



34
35
36
# File 'src/word.rb', line 34

def size
  @size
end

#to_hexString

Devuelve la representación del la palabra en hexadecimal.

Returns:

  • (String)

    string que representa a la palabra en hexadecimal.



120
121
122
# File 'src/word.rb', line 120

def to_hex
  to_i.to_s(16).rjust(@size.fdiv(4).ceil, '0')
end

#to_iNumeric

Transforma el número en un entero.

Returns:

  • (Numeric)

    entero que representa a la palabra.



108
109
110
# File 'src/word.rb', line 108

def to_i
  @n
end

#to_sString

Transforma el número en un string.

Returns:

  • (String)

    string que representa a la palabra.



114
115
116
# File 'src/word.rb', line 114

def to_s
  "0b#{@n.to_s(BASE).rjust(@size, '0')}"
end

#to_wordWord

Devuelve a si mismo.

Returns:

  • (Word)

    la palabra.



126
127
128
# File 'src/word.rb', line 126

def to_word
  self
end

#|(word) ⇒ Word Also known as:

Devuelve un or de dos palabras.

Parameters:

  • word (Word)

    palabra con la que se va a realizar el or.

Returns:

  • (Word)

    resultado de or.



55
56
57
# File 'src/word.rb', line 55

def |(word)
  Word.new(@n | word.to_i, @size)
end

#(value) ⇒ Word Also known as: left_rotate

Rota bits hacia la izquierda.

Parameters:

  • value (Numeric)

    cantidad de bits a rotar.

Returns:

  • (Word)

    resultado de haber rotado la palabra.



90
91
92
# File 'src/word.rb', line 90

def (value)
  self << value | self >> (@size - value)
end

#(value) ⇒ Word Also known as: right_rotate

Rota bits hacia la derecha.

Parameters:

  • value (Numeric)

    cantidad de bits a rotar.

Returns:

  • (Word)

    resultado de haber rotado la palabra.



83
84
85
# File 'src/word.rb', line 83

def (value)
  self >> value | self << (@size - value)
end