#![allow(dead_code)]
use crate::errors::*;
use crate::objects::enums::Status;
use crate::objects::structs::StatusCode;
use crate::objects::types::{APIResult, HelperResult};
use opencl_heads::types::*;
pub fn status_update<T>(
status_code: cl_int,
function_name: &'static str,
result: T,
) -> APIResult<T> {
let status_details = status_reason(status_code, function_name);
if StatusCode::SUCCESS != status_code {
Err(OpenCLAPIError::StatusCodeError {
code: Status::from(status_code),
int_code: status_code,
func: function_name,
reason: status_details,
})
} else {
Ok(result)
}
}
fn status_reason(status_code: cl_int, function_name: &'static str) -> String {
let base_url =
"https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_API.html#";
format!(
"{}. please refer to api docs for more details about this error: {}{}",
Status::from(status_code).reason(),
base_url,
function_name
)
}
pub fn bytes_into_string(mut bytes: Vec<u8>) -> HelperResult<String> {
if bytes.last() == Some(&0u8) {
bytes.pop();
}
let output = String::from_utf8(bytes).map(|str| String::from(str.trim()));
match output {
Ok(x) => Ok(x),
Err(_) => Err(RuntimeError::CorruptedByteArray.to_error()),
}
}
pub fn to_mut_ptr<T>(x: &mut T) -> *mut T {
&mut *x
}
pub fn bool_to_clbool(val: bool) -> cl_bool {
match val {
true => 1,
false => 0,
}
}