rubyx/lib/soml/parfait/word.soml

48 lines
946 B
Plaintext
Raw Normal View History

2015-11-07 23:54:47 +01:00
class Word < Object
2015-11-10 18:08:48 +01:00
int char_at(int index)
int word_index = index - 1
word_index = word_index >> 2
word_index = word_index + 3
int rest = index - 1
rest = rest.mod(4)
int char = get_internal(word_index)
int shifted = 8 * rest
shifted = char >> shifted
int ret = shifted & 255
return ret
2015-11-08 16:11:03 +01:00
end
2015-11-10 18:08:48 +01:00
int set_length(int i)
set_internal( 2 , i)
return i
end
Word push_char(int char)
int index = self.char_length + 1
self.set_length(index)
int word_index = index - 1
word_index = word_index >> 2
word_index = word_index + 3
int rest = index - 1
rest = rest.mod(4)
int shifted = rest * 8
shifted = char << shifted
int was = get_internal( word_index )
int mask = rest * 8
mask = 255 << mask
mask = 4294967295 - mask
int masked = was & mask
int put = masked + shifted
set_internal( word_index , put )
2015-11-08 16:11:03 +01:00
return self
end
2015-11-07 23:54:47 +01:00
end