|
17 | 17 |
|
18 | 18 | //! [`ScalarValue`]: stores single values |
19 | 19 |
|
| 20 | +mod consts; |
20 | 21 | mod struct_builder; |
| 22 | + |
21 | 23 | use std::borrow::Borrow; |
22 | 24 | use std::cmp::Ordering; |
23 | 25 | use std::collections::{HashSet, VecDeque}; |
@@ -1007,6 +1009,123 @@ impl ScalarValue { |
1007 | 1009 | } |
1008 | 1010 | } |
1009 | 1011 |
|
| 1012 | + /// Returns a [`ScalarValue`] representing PI |
| 1013 | + pub fn new_pi(datatype: &DataType) -> Result<ScalarValue> { |
| 1014 | + match datatype { |
| 1015 | + DataType::Float32 => Ok(ScalarValue::from(std::f32::consts::PI)), |
| 1016 | + DataType::Float64 => Ok(ScalarValue::from(std::f64::consts::PI)), |
| 1017 | + _ => _internal_err!("PI is not supported for data type: {:?}", datatype), |
| 1018 | + } |
| 1019 | + } |
| 1020 | + |
| 1021 | + /// Returns a [`ScalarValue`] representing PI's upper bound |
| 1022 | + pub fn new_pi_upper(datatype: &DataType) -> Result<ScalarValue> { |
| 1023 | + // TODO: replace the constants with next_up/next_down when |
| 1024 | + // they are stabilized: https://doc.rust-lang.org/std/primitive.f64.html#method.next_up |
| 1025 | + match datatype { |
| 1026 | + DataType::Float32 => Ok(ScalarValue::from(consts::PI_UPPER_F32)), |
| 1027 | + DataType::Float64 => Ok(ScalarValue::from(consts::PI_UPPER_F64)), |
| 1028 | + _ => { |
| 1029 | + _internal_err!("PI_UPPER is not supported for data type: {:?}", datatype) |
| 1030 | + } |
| 1031 | + } |
| 1032 | + } |
| 1033 | + |
| 1034 | + /// Returns a [`ScalarValue`] representing -PI's lower bound |
| 1035 | + pub fn new_negative_pi_lower(datatype: &DataType) -> Result<ScalarValue> { |
| 1036 | + match datatype { |
| 1037 | + DataType::Float32 => Ok(ScalarValue::from(consts::NEGATIVE_PI_LOWER_F32)), |
| 1038 | + DataType::Float64 => Ok(ScalarValue::from(consts::NEGATIVE_PI_LOWER_F64)), |
| 1039 | + _ => { |
| 1040 | + _internal_err!("-PI_LOWER is not supported for data type: {:?}", datatype) |
| 1041 | + } |
| 1042 | + } |
| 1043 | + } |
| 1044 | + |
| 1045 | + /// Returns a [`ScalarValue`] representing FRAC_PI_2's upper bound |
| 1046 | + pub fn new_frac_pi_2_upper(datatype: &DataType) -> Result<ScalarValue> { |
| 1047 | + match datatype { |
| 1048 | + DataType::Float32 => Ok(ScalarValue::from(consts::FRAC_PI_2_UPPER_F32)), |
| 1049 | + DataType::Float64 => Ok(ScalarValue::from(consts::FRAC_PI_2_UPPER_F64)), |
| 1050 | + _ => { |
| 1051 | + _internal_err!( |
| 1052 | + "PI_UPPER/2 is not supported for data type: {:?}", |
| 1053 | + datatype |
| 1054 | + ) |
| 1055 | + } |
| 1056 | + } |
| 1057 | + } |
| 1058 | + |
| 1059 | + // Returns a [`ScalarValue`] representing FRAC_PI_2's lower bound |
| 1060 | + pub fn new_neg_frac_pi_2_lower(datatype: &DataType) -> Result<ScalarValue> { |
| 1061 | + match datatype { |
| 1062 | + DataType::Float32 => { |
| 1063 | + Ok(ScalarValue::from(consts::NEGATIVE_FRAC_PI_2_LOWER_F32)) |
| 1064 | + } |
| 1065 | + DataType::Float64 => { |
| 1066 | + Ok(ScalarValue::from(consts::NEGATIVE_FRAC_PI_2_LOWER_F64)) |
| 1067 | + } |
| 1068 | + _ => { |
| 1069 | + _internal_err!( |
| 1070 | + "-PI/2_LOWER is not supported for data type: {:?}", |
| 1071 | + datatype |
| 1072 | + ) |
| 1073 | + } |
| 1074 | + } |
| 1075 | + } |
| 1076 | + |
| 1077 | + /// Returns a [`ScalarValue`] representing -PI |
| 1078 | + pub fn new_negative_pi(datatype: &DataType) -> Result<ScalarValue> { |
| 1079 | + match datatype { |
| 1080 | + DataType::Float32 => Ok(ScalarValue::from(-std::f32::consts::PI)), |
| 1081 | + DataType::Float64 => Ok(ScalarValue::from(-std::f64::consts::PI)), |
| 1082 | + _ => _internal_err!("-PI is not supported for data type: {:?}", datatype), |
| 1083 | + } |
| 1084 | + } |
| 1085 | + |
| 1086 | + /// Returns a [`ScalarValue`] representing PI/2 |
| 1087 | + pub fn new_frac_pi_2(datatype: &DataType) -> Result<ScalarValue> { |
| 1088 | + match datatype { |
| 1089 | + DataType::Float32 => Ok(ScalarValue::from(std::f32::consts::FRAC_PI_2)), |
| 1090 | + DataType::Float64 => Ok(ScalarValue::from(std::f64::consts::FRAC_PI_2)), |
| 1091 | + _ => _internal_err!("PI/2 is not supported for data type: {:?}", datatype), |
| 1092 | + } |
| 1093 | + } |
| 1094 | + |
| 1095 | + /// Returns a [`ScalarValue`] representing -PI/2 |
| 1096 | + pub fn new_neg_frac_pi_2(datatype: &DataType) -> Result<ScalarValue> { |
| 1097 | + match datatype { |
| 1098 | + DataType::Float32 => Ok(ScalarValue::from(-std::f32::consts::FRAC_PI_2)), |
| 1099 | + DataType::Float64 => Ok(ScalarValue::from(-std::f64::consts::FRAC_PI_2)), |
| 1100 | + _ => _internal_err!("-PI/2 is not supported for data type: {:?}", datatype), |
| 1101 | + } |
| 1102 | + } |
| 1103 | + |
| 1104 | + /// Returns a [`ScalarValue`] representing infinity |
| 1105 | + pub fn new_infinity(datatype: &DataType) -> Result<ScalarValue> { |
| 1106 | + match datatype { |
| 1107 | + DataType::Float32 => Ok(ScalarValue::from(f32::INFINITY)), |
| 1108 | + DataType::Float64 => Ok(ScalarValue::from(f64::INFINITY)), |
| 1109 | + _ => { |
| 1110 | + _internal_err!("Infinity is not supported for data type: {:?}", datatype) |
| 1111 | + } |
| 1112 | + } |
| 1113 | + } |
| 1114 | + |
| 1115 | + /// Returns a [`ScalarValue`] representing negative infinity |
| 1116 | + pub fn new_neg_infinity(datatype: &DataType) -> Result<ScalarValue> { |
| 1117 | + match datatype { |
| 1118 | + DataType::Float32 => Ok(ScalarValue::from(f32::NEG_INFINITY)), |
| 1119 | + DataType::Float64 => Ok(ScalarValue::from(f64::NEG_INFINITY)), |
| 1120 | + _ => { |
| 1121 | + _internal_err!( |
| 1122 | + "Negative Infinity is not supported for data type: {:?}", |
| 1123 | + datatype |
| 1124 | + ) |
| 1125 | + } |
| 1126 | + } |
| 1127 | + } |
| 1128 | + |
1010 | 1129 | /// Create a zero value in the given type. |
1011 | 1130 | pub fn new_zero(datatype: &DataType) -> Result<ScalarValue> { |
1012 | 1131 | Ok(match datatype { |
|
0 commit comments