1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use crate::backends::core::implementation::engines::CoreEngine;
use crate::backends::core::implementation::entities::{CleartextVector32, CleartextVector64};
use crate::backends::core::private::crypto::encoding::CleartextList as ImplCleartextList;
use crate::specification::engines::{CleartextVectorCreationEngine, CleartextVectorCreationError};

/// # Description:
/// Implementation of [`CleartextVectorCreationEngine`] for [`CoreEngine`] that operates on 32 bits
/// integers.
impl CleartextVectorCreationEngine<u32, CleartextVector32> for CoreEngine {
    /// # Example:
    /// ```
    /// use concrete_commons::parameters::CleartextCount;
    /// use concrete_core::prelude::*;
    /// # use std::error::Error;
    ///
    /// # fn main() -> Result<(), Box<dyn Error>> {
    /// let input = vec![3_u32; 100];
    ///
    /// let mut engine = CoreEngine::new()?;
    /// let cleartext_vector: CleartextVector32 = engine.create_cleartext_vector(&input)?;
    /// #
    /// assert_eq!(cleartext_vector.cleartext_count(), CleartextCount(100));
    /// engine.destroy(cleartext_vector)?;
    /// #
    /// # Ok(())
    /// # }
    /// ```
    fn create_cleartext_vector(
        &mut self,
        input: &[u32],
    ) -> Result<CleartextVector32, CleartextVectorCreationError<Self::EngineError>> {
        CleartextVectorCreationError::perform_generic_checks(input)?;
        Ok(unsafe { self.create_cleartext_vector_unchecked(input) })
    }

    unsafe fn create_cleartext_vector_unchecked(&mut self, input: &[u32]) -> CleartextVector32 {
        CleartextVector32(ImplCleartextList::from_container(input.to_vec()))
    }
}

/// # Description:
/// Implementation of [`CleartextVectorCreationEngine`] for [`CoreEngine`] that operates on 64 bits
/// integers.
impl CleartextVectorCreationEngine<u64, CleartextVector64> for CoreEngine {
    /// # Example:
    /// ```
    /// use concrete_commons::parameters::CleartextCount;
    /// use concrete_core::prelude::*;
    /// # use std::error::Error;
    ///
    /// # fn main() -> Result<(), Box<dyn Error>> {
    /// let input = vec![3_u64; 100];
    ///
    /// let mut engine = CoreEngine::new()?;
    /// let cleartext_vector: CleartextVector64 = engine.create_cleartext_vector(&input)?;
    /// #
    /// assert_eq!(cleartext_vector.cleartext_count(), CleartextCount(100));
    /// engine.destroy(cleartext_vector)?;
    /// #
    /// # Ok(())
    /// # }
    /// ```
    fn create_cleartext_vector(
        &mut self,
        input: &[u64],
    ) -> Result<CleartextVector64, CleartextVectorCreationError<Self::EngineError>> {
        CleartextVectorCreationError::perform_generic_checks(input)?;
        Ok(unsafe { self.create_cleartext_vector_unchecked(input) })
    }

    unsafe fn create_cleartext_vector_unchecked(&mut self, input: &[u64]) -> CleartextVector64 {
        CleartextVector64(ImplCleartextList::from_container(input.to_vec()))
    }
}