From 344c3db875056d4aec509f24fb2dbeaf7e2a14b6 Mon Sep 17 00:00:00 2001
From: Titus Wormer <tituswormer@gmail.com>
Date: Thu, 9 Jun 2022 14:28:59 +0200
Subject: Refactor to pass more slices around

---
 src/content/flow.rs   |  2 +-
 src/content/string.rs |  2 +-
 src/parser.rs         |  2 +-
 src/tokenizer.rs      | 10 +++++-----
 4 files changed, 8 insertions(+), 8 deletions(-)

(limited to 'src')

diff --git a/src/content/flow.rs b/src/content/flow.rs
index ac987e1..693ffb5 100644
--- a/src/content/flow.rs
+++ b/src/content/flow.rs
@@ -32,7 +32,7 @@ use crate::util::get_span;
 /// Turn `codes` as the flow content type into events.
 // To do: remove this `allow` when all the content types are glued together.
 #[allow(dead_code)]
-pub fn flow(codes: Vec<Code>) -> Vec<Event> {
+pub fn flow(codes: &[Code]) -> Vec<Event> {
     let mut tokenizer = Tokenizer::new();
     let (state, remainder) = tokenizer.feed(codes, Box::new(start), true);
 
diff --git a/src/content/string.rs b/src/content/string.rs
index a8a81b2..1239a36 100644
--- a/src/content/string.rs
+++ b/src/content/string.rs
@@ -18,7 +18,7 @@ use crate::tokenizer::{Code, Event, State, StateFnResult, TokenType, Tokenizer};
 /// Turn `codes` as the string content type into events.
 // To do: remove this `allow` when all the content types are glued together.
 #[allow(dead_code)]
-pub fn string(codes: Vec<Code>) -> Vec<Event> {
+pub fn string(codes: &[Code]) -> Vec<Event> {
     let mut tokenizer = Tokenizer::new();
     let (state, remainder) = tokenizer.feed(codes, Box::new(before), true);
 
diff --git a/src/parser.rs b/src/parser.rs
index 10c6e7a..e156e33 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -9,6 +9,6 @@ use crate::tokenizer::{as_codes, Code, Event};
 pub fn parse(value: &str) -> (Vec<Event>, Vec<Code>) {
     let codes = as_codes(value);
     // To do: pass a reference to this around, and slices in the (back)feeding. Might be tough.
-    let events = flow(codes.clone());
+    let events = flow(&codes);
     (events, codes)
 }
diff --git a/src/tokenizer.rs b/src/tokenizer.rs
index 4239520..faee8d9 100644
--- a/src/tokenizer.rs
+++ b/src/tokenizer.rs
@@ -334,7 +334,7 @@ impl Tokenizer {
                     tokenizer.point
                 );
                 let result = done(ok);
-                tokenizer.feed(codes, result, false)
+                tokenizer.feed(&codes, result, false)
             },
         )
     }
@@ -373,7 +373,7 @@ impl Tokenizer {
                     tokenizer.point
                 );
                 let result = done(ok);
-                tokenizer.feed(codes, result, false)
+                tokenizer.feed(&codes, result, false)
             },
         )
     }
@@ -440,11 +440,11 @@ impl Tokenizer {
     /// When `done: true` is passed, the EOF is fed.
     pub fn feed(
         &mut self,
-        codes: Vec<Code>,
+        codes: &[Code],
         start: impl FnOnce(&mut Tokenizer, Code) -> StateFnResult + 'static,
         drain: bool,
     ) -> StateFnResult {
-        let mut codes = codes;
+        let codes = codes;
         let mut state = State::Fn(Box::new(start));
         let mut index = 0;
 
@@ -474,7 +474,7 @@ impl Tokenizer {
 
         // Yield to a higher loop if we shouldn’t feed EOFs.
         if !drain {
-            return (state, Some(codes.split_off(index)));
+            return (state, Some(codes[index..].to_vec()));
         }
 
         loop {
-- 
cgit