Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- with Ada.Text_IO; use Ada.Text_IO;
- with Ada.Containers.Vectors; use Ada.Containers;
- package body GF2n is
- function "+"(X: Element_Type; Y: Element_Type) return Element_Type is
- begin
- return X xor Y;
- end "+";
- function "-"(X: Element_Type; Y: Element_Type) return Element_Type is
- begin
- return X xor Y;
- end "-";
- function "*"(X: Element_Type; Y: Element_Type) return Element_Type is
- Y_In_Bits : Bit_Array;
- Tmp_Element_Type : Element_Type;
- Tmp : Element_Type := 0;
- begin
- Y_In_Bits := Get_Binary(Y);
- for i in Y_In_Bits'Range loop
- if Y_In_Bits(i) = 1 then
- Tmp_Element_Type := Shift_Left(X, i);
- Tmp := Tmp xor Tmp_Element_Type;
- end if;
- end loop;
- return Tmp;
- end "*";
- function "/"(X: Element_Type; Y: Element_Type) return Element_Type is
- begin
- return Shift_Left(X, 1);
- end "/";
- function Find_Inverse(X: Element_Type) return Element_Type is
- begin
- return 1;
- end Find_Inverse;
- function GCD(X: Element_Type; Y: Element_Type) return Element_Type is
- begin
- return 1;
- end GCD;
- function Is_Primitive(X: Element_Type) return Boolean is
- begin
- return True;
- end Is_Primitive;
- function Get_Binary(X: Element_Type) return Bit_Array is
- Bits : Bit_Array := (others => 0);
- Number : Integer := Integer(X);
- Quotient : Integer;
- Bit : Integer;
- Counter : Integer := 0;
- begin
- while Number > 0 loop
- Bit := Number mod 2 ;
- Quotient := Integer(Number / 2);
- Bits(Counter) := Bit;
- Number := Quotient ;
- Counter := Counter + 1;
- end loop;
- return Bits;
- end Get_Binary;
- end GF2n;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement