Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,92 +0,0 @@
|
|||
with Ada.Containers.Vectors;
|
||||
with Ada.Text_IO;
|
||||
with Ada.Unchecked_Conversion;
|
||||
|
||||
procedure VLQ is
|
||||
|
||||
package Nat_IO is new Ada.Text_IO.Integer_IO (Natural);
|
||||
|
||||
type Byte is mod 2**8;
|
||||
|
||||
package Byte_IO is new Ada.Text_IO.Modular_IO (Byte);
|
||||
|
||||
type Int7 is mod 2**7;
|
||||
|
||||
package Int7_IO is new Ada.Text_IO.Modular_IO (Int7);
|
||||
|
||||
type VLQ_Octet is record
|
||||
Value : Int7 := 0;
|
||||
Next : Boolean := True;
|
||||
end record;
|
||||
pragma Pack (VLQ_Octet);
|
||||
for VLQ_Octet'Size use 8;
|
||||
|
||||
function VLQ_To_Byte is new Ada.Unchecked_Conversion (VLQ_Octet, Byte);
|
||||
function Byte_To_VLQ is new Ada.Unchecked_Conversion (Byte, VLQ_Octet);
|
||||
|
||||
package VLQ_Vectors is new Ada.Containers.Vectors (Natural, VLQ_Octet);
|
||||
|
||||
procedure Hex_Print (Position : in VLQ_Vectors.Cursor) is
|
||||
Value : Byte := VLQ_To_Byte (VLQ_Vectors.Element (Position));
|
||||
begin
|
||||
Ada.Text_IO.Put (':');
|
||||
Byte_IO.Put (Item => Value, Width => 6, Base => 16);
|
||||
end Hex_Print;
|
||||
|
||||
procedure Print (X : VLQ_Vectors.Vector) is
|
||||
begin
|
||||
X.Iterate (Hex_Print'Access);
|
||||
Ada.Text_IO.New_Line;
|
||||
end Print;
|
||||
|
||||
function To_VLQ (From : Natural) return VLQ_Vectors.Vector is
|
||||
Result : VLQ_Vectors.Vector;
|
||||
Current : Natural := From;
|
||||
Element : VLQ_Octet;
|
||||
begin
|
||||
loop
|
||||
Element.Value := Int7 (Current mod 2**7);
|
||||
Result.Prepend (Element);
|
||||
Current := Current / 2**7;
|
||||
exit when Current = 0;
|
||||
end loop;
|
||||
Element := Result.Last_Element;
|
||||
Element.Next := False;
|
||||
VLQ_Vectors.Replace_Element (Result, Result.Last, Element);
|
||||
return Result;
|
||||
end To_VLQ;
|
||||
|
||||
function To_Int (From : VLQ_Vectors.Vector) return Natural is
|
||||
use type VLQ_Vectors.Cursor;
|
||||
Result : Natural := 0;
|
||||
Iterator : VLQ_Vectors.Cursor := From.First;
|
||||
begin
|
||||
while Iterator /= VLQ_Vectors.No_Element loop
|
||||
Result := Result * 2**7;
|
||||
Result := Result + Natural(VLQ_Vectors.Element (Iterator).Value);
|
||||
VLQ_Vectors.Next (Iterator);
|
||||
end loop;
|
||||
return Result;
|
||||
end To_Int;
|
||||
|
||||
Test : VLQ_Vectors.Vector;
|
||||
begin
|
||||
Test := To_VLQ (16#7f#);
|
||||
Nat_IO.Put (To_Int (Test), 10, 16); Ada.Text_IO.Put (" = ");
|
||||
Print (Test);
|
||||
Test := To_VLQ (16#4000#);
|
||||
Nat_IO.Put (To_Int (Test), 10, 16); Ada.Text_IO.Put (" = ");
|
||||
Print (Test);
|
||||
Test := To_VLQ (16#0#);
|
||||
Nat_IO.Put (To_Int (Test), 10, 16); Ada.Text_IO.Put (" = ");
|
||||
Print (Test);
|
||||
Test := To_VLQ (16#3FFFFE#);
|
||||
Nat_IO.Put (To_Int (Test), 10, 16); Ada.Text_IO.Put (" = ");
|
||||
Print (Test);
|
||||
Test := To_VLQ (16#1FFFFF#);
|
||||
Nat_IO.Put (To_Int (Test), 10, 16); Ada.Text_IO.Put (" = ");
|
||||
Print (Test);
|
||||
Test := To_VLQ (16#200000#);
|
||||
Nat_IO.Put (To_Int (Test), 10, 16); Ada.Text_IO.Put (" = ");
|
||||
Print (Test);
|
||||
end VLQ;
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
function vlq_encode(integer n)
|
||||
sequence s
|
||||
s = {}
|
||||
while n > 0 do
|
||||
s = prepend(s, #80 * (length(s) > 0) + and_bits(n, #7F))
|
||||
n = floor(n / #80)
|
||||
end while
|
||||
if length(s) = 0 then
|
||||
s = {0}
|
||||
end if
|
||||
return s
|
||||
end function
|
||||
|
||||
function vlq_decode(sequence s)
|
||||
integer n
|
||||
n = 0
|
||||
for i = 1 to length(s) do
|
||||
n *= #80
|
||||
n += and_bits(s[i], #7F)
|
||||
if not and_bits(s[i], #80) then
|
||||
exit
|
||||
end if
|
||||
end for
|
||||
return n
|
||||
end function
|
||||
|
||||
function svlg(sequence s)
|
||||
sequence out
|
||||
out = ""
|
||||
for i = 1 to length(s) do
|
||||
out &= sprintf("#%02x:", {s[i]})
|
||||
end for
|
||||
return out[1..$-1]
|
||||
end function
|
||||
|
||||
constant testNumbers = { #200000, #1FFFFF, 1, 127, 128 }
|
||||
sequence s
|
||||
for i = 1 to length(testNumbers) do
|
||||
s = vlq_encode(testNumbers[i])
|
||||
printf(1, "#%02x -> %s -> #%02x\n", {testNumbers[i], svlg(s), vlq_decode(s)})
|
||||
end for
|
||||
Loading…
Add table
Add a link
Reference in a new issue