Misty Programming Language:

Blob Functions

The blob module acts on blobs.

use blob
Kim lengths for fit values
from thru length
bytes bits
-36028797018963968 10 80
-562949953421312 -36028797018963967 9 72
-4398046511104 -562949953421311 8 64
-34359738368 -4398046511103 7 56
-268435456 -34359738367 6 48
-2097152 -268435455 5 40
-16384 -2097151 4 32
-128 -16383 3 24
-1 -127 2 16
0 127 1 8
128 16383 2 16
16384 2097151 3 24
2097152 268435455 4 32
268435456 34359738367 5 40
34359738368 4398046511103 6 48
4398046511104 562949953421311 7 56
562949953421312 36028797018963967 8 64

A blob is a binary large object, a linear container of bits. Blobs can be used to encode sounds, images, public keys, network address, and encrypted payloads.

Blobs are created with bob.make. Bits are appended to a blob with the blob.write_ functions. Information can be retrieved from a blob with the blob.read_ functions. Blogs produce true with the blob? and data? intrinsic functions. The length intrinsic function determines the number of bits in a bob.

A blob can be in one of two states, either antestone or stone. In the mutable antestone state, the write functions may be used to append bits to the blob. In the immutable stone state, bits can be harvested from the blob. Bits can be written to blobs as fixed size bit fields, that is a sequence of bits with a specified length, or as a Kim.

Blob

blob.make()

Make a new empty blob.

blob.make(capacity)

Make a new empty blob with a specific initial capacity in bits.

blob.make(length, random)

Make a new blob of a given length whose content is random. The random parameter is a random generator function.

blob.make(blob, from, to)

Make a copy of all or part of a blob. The default of from is 0. The default of to is the length(blob).

 

Write functions

The write functions append bits to the end of a blob.

blob.write_bit(blob, logical)

Append a bit to the end of the blob. The logical value can be true, false, 1, or 0. Any other value will disrupt.

blob.write_blob(first_blob, second_blob)

Append second_blob to the end of first_blob.

blob.write_dec64(blob, number)

Append a 64 bit DEC64 encoded number to a stone blob.

blob.write_fit(blob, fit, length)

Append a bit field to the blob. If fit requires more bits than allowed by length, it disrupts.

blob.write_kim(blob, fit)

Append a fit number or a single character as a kim value.

blob.write_pad(blob, block_size)

Append a 1 bit to the antestone blob followed by enough 0 bits to round up the blob's length to a multiple of the block_size.

blob.write_text(blob, text)

Append a text. This will be encoded as a kim encoded length followed by a sequence of kim encoded UTF-32 characters.

Read functions

The read functions retrieve bits from a stone blob. The from arguments specifies the bit location at which to read. The beginning of the blob is at 0.

blob.read_dec64(blob, from)

Retrieve a 64 bit DEC64 encoded number from a stone blob.

blob.read_kim(blob, from)

Retrieve a Kim encoded fit number from a stone blob.

blob.read_fit(blob, from, length)

Retrieve a fit number from a bit field from a stone blob.

blob.read_logical(blob, from)

Retrieve a bit from the blob. If blob is not a stone blob, or if from is out of range, it returns null.

blob.pad?(blob, from, block_size)

Return true if the stone blob's length is a multiple of the block_size (in bits), and if the difference between length and from is less than or equal to the block_size, and if the bit at from is one, and that any remaining bits are zero.

blob.read_text(blob, from)

Retrieve a Kim encoded text from a stone blob.

Kim

Kim lengths for fit values
from thru length
bytes bits
-36028797018963968 10 80
-562949953421312 -36028797018963967 9 72
-4398046511104 -562949953421311 8 64
-34359738368 -4398046511103 7 56
-268435456 -34359738367 6 48
-2097152 -268435455 5 40
-16384 -2097151 4 32
-128 -16383 3 24
-1 -127 2 16
0 127 1 8
128 16383 2 16
16384 2097151 3 24
2097152 268435455 4 32
268435456 34359738367 5 40
34359738368 4398046511103 6 48
4398046511104 562949953421311 7 56
562949953421312 36028797018963967 8 64

Kim is an encoding of fit numbers. Kim is a very simple encoding that delivers 7 bits per byte. The bottom 7 bits of each byte contain data, which can be accumulated to produce fit numbers. The top bit of each byte is 1 if the byte is not the last and least byte of a number. The top bit of each byte is 0 if the byte is the last byte of a number. The last byte contains the 7 least significant bits. A first byte of 0x80 indicates negation.

bits.kim_length(value)

The kim_length function gives the length in bits of the Kim encoding of a value. If the value is a fit number, it gives a result as shown in the table. If value is a logical, it gives 1. If value is a text, it gives the length in

of the Kim encoding of a text, giving the sum of the kim encodings of the length and each character. Otherwise, it gives null.