58 lines
1.5 KiB
Plaintext
58 lines
1.5 KiB
Plaintext
note
|
|
description: "[
|
|
Provides features to encode and decode messages
|
|
]"
|
|
legal: "See notice at end of class."
|
|
status: "Community Preview 1.0"
|
|
date: "$Date: 2009-09-01 19:15:37 -0300 (mar 01 de sep de 2009) $"
|
|
revision: "$Revision: 80577 $"
|
|
|
|
class
|
|
HTTP_ENCODING_FACILITIES
|
|
|
|
create
|
|
make
|
|
|
|
feature -- Initialization
|
|
|
|
make
|
|
do
|
|
end
|
|
|
|
feature -- Conversion
|
|
|
|
encode_natural(a_i: NATURAL; a_is_fragmented: BOOLEAN): NATURAL
|
|
-- Leftshift of the natural (don't use numbers >= 2^31) and subsequent append of the flag bit.
|
|
-- Use decode_natural and decode_flag for decoding.
|
|
require
|
|
no_too_big: a_i < 2147483648
|
|
do
|
|
Result := (a_i |<< 1) + a_is_fragmented.to_integer.as_natural_32
|
|
end
|
|
|
|
change_flag(a_i: NATURAL; a_new_flag: BOOLEAN): NATURAL
|
|
-- Changes the flag to "new_flag" and doesn't change the encoded natural.
|
|
do
|
|
Result := (a_i & 0xFFFFFFFE) + a_new_flag.to_integer.as_natural_32
|
|
end
|
|
|
|
decode_natural_and_flag (a_i: NATURAL): TUPLE [NATURAL, BOOLEAN]
|
|
-- Convenience feature which combines both decodings (natural and flag)
|
|
do
|
|
Result := [decode_natural (a_i), decode_flag (a_i)]
|
|
end
|
|
|
|
decode_natural (a_i: NATURAL): NATURAL
|
|
-- The natural that was encoded in {ENCODING_FACILITIES}.encode_natural.
|
|
do
|
|
Result := (a_i |>> 1)
|
|
end
|
|
|
|
decode_flag (a_i: NATURAL): BOOLEAN
|
|
--`Result': the flag that was encoded in encode_natural
|
|
do
|
|
Result := (a_i.bit_and (1) = 1)
|
|
end
|
|
|
|
end
|