From: Ben Pfaff Date: Mon, 28 Jul 2025 16:52:42 +0000 (-0700) Subject: succcess X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aad63d78f0b74933fca54fc11eed5dfacf609262;p=pspp succcess --- diff --git a/rust/pspp/src/data.rs b/rust/pspp/src/data.rs index 3f9eda1046..2bca7c2c99 100644 --- a/rust/pspp/src/data.rs +++ b/rust/pspp/src/data.rs @@ -333,6 +333,10 @@ where _ => false, } } + + pub fn quoted(&self) -> QuotedEncodedDatum<'_> { + QuotedEncodedDatum(self.borrowed()) + } } impl EncodedDatum { @@ -397,10 +401,6 @@ impl EncodedDatum { Self::String(s) => s.trim_end(), } } - - pub fn quoted(&self) -> QuotedEncodedDatum<'_> { - QuotedEncodedDatum(self.borrowed()) - } } impl Display for EncodedDatum { diff --git a/rust/pspp/src/format/display/mod.rs b/rust/pspp/src/format/display/mod.rs index b1626bf588..fe69aba6c6 100644 --- a/rust/pspp/src/format/display/mod.rs +++ b/rust/pspp/src/format/display/mod.rs @@ -15,6 +15,7 @@ // this program. If not, see . use std::{ + borrow::Borrow, cmp::min, fmt::{Display, Error as FmtError, Formatter, Result as FmtResult, Write as _}, io::{Error as IoError, Write as IoWrite}, @@ -29,7 +30,10 @@ use smallvec::{Array, SmallVec}; use crate::{ calendar::{calendar_offset_to_gregorian, day_of_year, month_name, short_month_name}, - data::{EncodedDat, EncodedDatum, QuotedEncodedDatum}, + data::{ + BorrowedEncodedDatum, BorrowedRawString, EncodedDat, EncodedDatum, EncodedString, + QuotedEncodedDatum, + }, endian::{endian_to_smallvec, ToBytes}, format::{Category, DateTemplate, Decimal, Format, NumberStyle, Settings, TemplateItem, Type}, settings::{EndianSettings, Settings as PsppSettings}, @@ -39,7 +43,7 @@ pub struct DisplayDatum<'a, 'b> { format: Format, settings: &'b Settings, endian: EndianSettings, - datum: EncodedDat<'a>, + datum: BorrowedEncodedDatum<'a>, /// If true, the output will remove leading and trailing spaces from numeric /// values, and trailing spaces from string values. (This might make the @@ -82,21 +86,10 @@ impl Display for DisplayPlainF64 { } } -impl EncodedDat<'_> { - /// Returns an object that implements [Display] for printing this - /// [EncodedDatum] as `format`. - /// - /// [Display]: std::fmt::Display - pub fn display(&self, format: Format) -> DisplayDatum { - DisplayDatum::new(format, *self) - } - - pub fn display_plain(&self) -> QuotedEncodedDatum<'_> { - self.quoted() - } -} - -impl EncodedDatum { +impl EncodedDatum> +where + R: Borrow, +{ /// Returns an object that implements [Display] for printing this /// [EncodedDatum] as `format`. /// @@ -113,8 +106,8 @@ impl EncodedDatum { impl Display for DisplayDatum<'_, '_> { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { let number = match self.datum { - EncodedDat::Number(number) => number, - EncodedDat::String(string) => { + EncodedDatum::Number(number) => number, + EncodedDatum::String(string) => { if self.format.type_() == Type::AHex { for byte in string.as_bytes() { write!(f, "{byte:02x}")?; @@ -173,7 +166,7 @@ impl Display for DisplayDatum<'_, '_> { } impl<'a, 'b> DisplayDatum<'a, 'b> { - pub fn new(format: Format, datum: EncodedDat<'a>) -> Self { + pub fn new(format: Format, datum: BorrowedEncodedDatum<'a>) -> Self { let settings = PsppSettings::global(); Self { format, diff --git a/rust/pspp/src/format/display/test.rs b/rust/pspp/src/format/display/test.rs index f684519776..4b2fe81c7d 100644 --- a/rust/pspp/src/format/display/test.rs +++ b/rust/pspp/src/format/display/test.rs @@ -23,7 +23,7 @@ use smallstr::SmallString; use smallvec::SmallVec; use crate::{ - data::{ EncodedDatum}, + data::{EncodedDatum, OwnedEncodedDatum}, endian::Endian, format::{AbstractFormat, Epoch, Format, Settings, Type, UncheckedFormat, CC}, lex::{scan::StringScanner, segment::Syntax, Punct, Token}, @@ -75,7 +75,7 @@ fn test(name: &str) { let format: Format = format.try_into().unwrap(); assert_eq!(tokens.get(1), Some(&Token::Punct(Punct::Colon))); let expected = tokens[2].as_string().unwrap(); - let actual = EncodedDatum::Number(value) + let actual = OwnedEncodedDatum::Number(value) .display(format) .with_settings(&settings) .with_endian(endian) @@ -266,7 +266,7 @@ fn test_binhex(name: &str) { assert_eq!(tokens.get(1), Some(&Token::Punct(Punct::Colon))); let expected = tokens[2].as_string().unwrap(); let mut actual = SmallVec::<[u8; 16]>::new(); - EncodedDatum::Number(value) + OwnedEncodedDatum::Number(value) .display(format) .with_endian(endian) .write(&mut actual, UTF_8) diff --git a/rust/pspp/src/output/pivot/mod.rs b/rust/pspp/src/output/pivot/mod.rs index ad29d5b6d4..1d6cd96d22 100644 --- a/rust/pspp/src/output/pivot/mod.rs +++ b/rust/pspp/src/output/pivot/mod.rs @@ -68,7 +68,10 @@ use thiserror::Error as ThisError; use tlo::parse_tlo; use crate::{ - data::{BorrowedRawString, Datum, EncodedDat, EncodedDatum, EncodedString, OwnedRawString}, + data::{ + BorrowedRawString, Datum, EncodedDat, EncodedDatum, EncodedString, OwnedEncodedDatum, + OwnedRawString, + }, dictionary::{VarType, Variable}, format::{Decimal, Format, Settings as FormatSettings, Type, UncheckedFormat}, settings::{Settings, Show}, @@ -1865,8 +1868,8 @@ impl Value { R: Borrow, { match value { - EncodedDat::Number(number) => Self::new_number(number), - EncodedDat::String(string) => Self::new_user_text(string.as_str()), + EncodedDatum::Number(number) => Self::new_number(*number), + EncodedDatum::String(string) => Self::new_user_text(string.as_str()), } } pub fn new_variable_value(variable: &Variable, value: &Datum) -> Self { @@ -2209,7 +2212,12 @@ impl Display for DisplayValue<'_> { *format }; let mut buf = SmallString::<[u8; 40]>::new(); - write!(&mut buf, "{}", EncodedDat::Number(*value).display(format)).unwrap(); + write!( + &mut buf, + "{}", + OwnedEncodedDatum::Number(*value).display(format) + ) + .unwrap(); write!(f, "{}", buf.trim_start_matches(' '))?; } if let Some(label) = self.show_label { diff --git a/rust/pspp/src/sys/test.rs b/rust/pspp/src/sys/test.rs index aa1714124a..f19924c2d8 100644 --- a/rust/pspp/src/sys/test.rs +++ b/rust/pspp/src/sys/test.rs @@ -666,7 +666,7 @@ where .push(Value::new_integer(Some((case_numbers.len() + 1) as f64))); data.push( case.into_iter() - .map(|datum| Value::new_datum(datum.borrowed())) + .map(|datum| Value::new_datum(&datum)) .collect::>(), ); }