1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3#![allow(non_upper_case_globals)]
4pub mod hash_alg;
5pub mod crypto;
6
7pub use crypto::crypto_alg_t;
8
9use std::mem;
10use crate::common::errcode;
11
12pub mod spf;
13pub use spf::spf_matrix_t;
14pub mod prio_queue;
15pub use prio_queue::priority_queue_t;
16
17const MAX_SIZE:usize = 65536;
18
19const SPF_MAX_NODE_NUM:usize = 1024;
20
21pub fn slice_xor(src:&[u8],dst:&mut [u8])->errcode::RESULT {
23 let src_len = src.len();
24 let dst_len = dst.len();
25
26 if dst_len<src_len {
27 return errcode::ERROR_BUFFER_TOO_SMALL;
28 }
29 let u64_src_len:usize = src_len/mem::size_of::<u64>();
30
31 let u64_dst = unsafe { &mut *(dst.as_mut_ptr() as *mut [u64;MAX_SIZE]) };
32 let u64_src = unsafe { &*(src.as_ptr() as *const [u64;MAX_SIZE])};
33
34 for i in 0..u64_src_len {
35 u64_dst[i] ^=u64_src[i];
36 }
37 let u64_dst_len:usize = dst_len/mem::size_of::<u64>();
38 for j in u64_src_len..u64_dst_len {
39 u64_dst[j] ^=0u64;
40 }
41
42 for k in u64_dst_len*mem::size_of::<u64>()..dst_len {
43 dst[k] ^=0u8;
44 }
45 return errcode::RESULT_SUCCESS
46}
47
48pub fn slice_xor_simple(src:&[u8],dst:&mut [u8])->errcode::RESULT {
50 let src_len = src.len();
51 let dst_len = dst.len();
52
53 if dst_len<src_len {
54 return errcode::ERROR_BUFFER_TOO_SMALL;
55 }
56
57 for i in 0..src_len {
58 dst[i] ^= src[i]
59 }
60
61 for k in src_len..dst_len {
62 dst[k] ^=0u8;
63 }
64 return errcode::RESULT_SUCCESS
65}
66
67pub fn log2(v:u64)->usize {
68 if v==0 {
69 return 0
70 }
71 for i in 1..u64::BITS+1 {
72 if v>>i == 0 {
73 return (i-1) as usize
74 }
75 }
76 return 0
77
78}
79
80pub fn merge_slice<T>(v1:&mut Vec<T>,v2:&Vec<T>)
82 where T:PartialEq+Clone {
83 for s in v2 {
84 if !v1.contains(s){
85 v1.push((*s).clone())
86 }
87 }
88}
89
90use std::hash::Hash;
92pub fn merge_slice2<T>(v1:&mut Vec<T>,v2:&Vec<T>)
93 where T:PartialEq+Clone+Eq+Hash+Sized {
94 use std::collections::HashSet;
95 let mut m:HashSet<T>=HashSet::with_capacity(v1.len()<<1);
96 m=v1.iter().map(|x| x.clone()).collect();
97 for s in v2{
103 if !m.contains(s) {
104 v1.push(s.clone())
105 }
106 }
107}