From 44efaf2f6cc1f5a84ac95623f6e383faa45410c7 Mon Sep 17 00:00:00 2001 From: Millian Poquet <millian.poquet@irit.fr> Date: Tue, 29 Apr 2025 20:29:39 +0200 Subject: [PATCH] ring buffer --- ring-buffer/mpoquet.tmTheme | 374 ++++++++++++++++++++++++++++++++++++ ring-buffer/ring-buffer.pdf | Bin 0 -> 45864 bytes ring-buffer/ring-buffer.typ | 109 +++++++++++ 3 files changed, 483 insertions(+) create mode 100644 ring-buffer/mpoquet.tmTheme create mode 100644 ring-buffer/ring-buffer.pdf create mode 100644 ring-buffer/ring-buffer.typ diff --git a/ring-buffer/mpoquet.tmTheme b/ring-buffer/mpoquet.tmTheme new file mode 100644 index 0000000..9b3a803 --- /dev/null +++ b/ring-buffer/mpoquet.tmTheme @@ -0,0 +1,374 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>author</key> + <string>Ankur Gupta</string> + <key>name</key> + <string>GitHub Clean White</string> + <key>settings</key> + <array> + <dict> + <key>settings</key> + <dict> + <key>background</key> + <string>#FFFFFF</string> + <key>caret</key> + <string>#000000</string> + <key>foreground</key> + <string>#000000</string> + <key>invisibles</key> + <string>#B3B3B3F4</string> + <key>lineHighlight</key> + <string>#0000001A</string> + <key>selection</key> + <string>#BAD6FD</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String</string> + <key>scope</key> + <string>string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#C41A16</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Number</string> + <key>scope</key> + <string>constant.numeric</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#0086B3</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Keyword</string> + <key>scope</key> + <string>keyword</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#A71D5D</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Operator</string> + <key>scope</key> + <string>keyword.operator</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Built-in constant</string> + <key>scope</key> + <string>constant.language</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#0086B3</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Exception</string> + <key>scope</key> + <string>support.class.exception</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#990000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function name</string> + <key>scope</key> + <string>entity.name.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#000000</string> + <!-- <key>fontStyle</key> + <string>italic</string> --> + </dict> + </dict> + <dict> + <key>name</key> + <string>Type name</string> + <key>scope</key> + <string>entity.name.type</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold underline</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Arguments</string> + <key>scope</key> + <string>variable.parameter</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Comment</string> + <key>scope</key> + <string>comment</string> + <key>settings</key> + <dict> + <!-- <key>fontStyle</key> + <string>italic</string> --> + <key>foreground</key> + <string>#707070</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid</string> + <key>scope</key> + <string>invalid</string> + <key>settings</key> + <dict> + <!-- <key>background</key> + <string>#E71A114D</string> --> + <key>foreground</key> + <string>#FF0000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Trailing whitespace</string> + <key>scope</key> + <string>invalid.deprecated.trailing-whitespace</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#E71A1100</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Embedded source</string> + <key>scope</key> + <string>text source</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#FAFAFAFC</string> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag</string> + <key>scope</key> + <string>meta.tag, declaration.tag</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#AA0D91</string> + </dict> + </dict> + <!-- <dict> + <key>name</key> + <string>Constant</string> + <key>scope</key> + <string>constant, support.constant</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> --> + <dict> + <key>name</key> + <string>Support</string> + <key>scope</key> + <string>support</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold</string> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage</string> + <key>scope</key> + <string>storage</string> + <key>settings</key> + <dict> + <!-- <key>fontStyle</key> + <string>bold</string> --> + <key>foreground</key> + <string>#AA0D91</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Section name</string> + <key>scope</key> + <string>entity.name.section</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold underline</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Frame title</string> + <key>scope</key> + <string>entity.name.function.frame</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold</string> + <key>foreground</key> + <string>#000000</string> + <!-- <string>#881280</string> --> + </dict> + </dict> + <dict> + <key>name</key> + <string>XML Declaration</string> + <key>scope</key> + <string>meta.tag.preprocessor.xml</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#333333</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>html attribute</string> + <key>scope</key> + <string>entity.other.attribute-name</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <!-- <string>#3366CC</string> --> + <string>#0A8585</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>html tag punctuation</string> + <key>scope</key> + <string>entity.name.tag</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#121289</string> + <!-- <key>fontStyle</key> + <string>bold</string> --> + </dict> + </dict> + <!-- Adding stuff for diff. This works in ST3 --> + <dict> + <key>name</key> + <string>diff header from</string> + <key>scope</key> + <string>meta.diff.header.from-file</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#FFDDDD</string> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff header to</string> + <key>scope</key> + <string>meta.diff.header.to-file</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#DDFFDD</string> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff inserted</string> + <key>scope</key> + <string>markup.inserted.diff</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#DDFFDD</string> + <key>fontStyle</key> + <string></string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff deleted</string> + <key>scope</key> + <string>markup.deleted.diff</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#FFDDDD</string> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#000000</string> + </dict> + </dict> + <!-- BracketHighlighter colors --> + <dict> + <key>name</key> + <string>BH Color</string> + <key>scope</key> + <string>brackethighlighter.default</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#FF992244</string> + <key>fontStyle</key> + <string>italic</string> + </dict> + </dict> + </array> + <key>uuid</key> + <string>26786979-843B-4FE2-BCB6-4FCEC6F8FB58</string> + <key>colorSpaceName</key> + <string>sRGB</string> + <key>semanticClass</key> + <string>theme.light.git_hub_clean_white</string> + <key>comment</key> + <string>v1.0 Feb 1, 2015 +Made to look as close to GitHub as possible.</string> +</dict> +</plist> diff --git a/ring-buffer/ring-buffer.pdf b/ring-buffer/ring-buffer.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b676ce0c5117a667f03e7d440372c89c6bb703a GIT binary patch literal 45864 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 Y9)Bq=Nh~S>*DofZ;NntMb@g`x09Qn|ga7~l literal 0 HcmV?d00001 diff --git a/ring-buffer/ring-buffer.typ b/ring-buffer/ring-buffer.typ new file mode 100644 index 0000000..de0de0a --- /dev/null +++ b/ring-buffer/ring-buffer.typ @@ -0,0 +1,109 @@ +#import "@preview/touying:0.6.1": * +#import themes.metropolis: * +#import "@preview/cetz:0.3.4" +#import "@preview/codly:1.3.0": * +#import "@preview/codly-languages:0.1.8": * + +#set raw(theme: "mpoquet.tmTheme") +#show: codly-init.with() +#codly(display-name: false) + +#show strong: it => text(fill: luma(10%), it) + +#let cetz-canvas = touying-reducer.with(reduce: cetz.canvas, cover: cetz.draw.hide.with(bounds: true)) + +#show: metropolis-theme.with( + aspect-ratio: "16-9", + footer: self => self.info.institution, + config-info( + title: [Ring buffer], + subtitle: [_and in the darkness bind them_], + author: [Millian #smallcaps[Poquet]], + date: [2025-04-29], + ), +) +#title-slide() + +== Qu'est-ce à dire que ceci ? +Différents noms pour la même chose : `(ring|cyclic|circular) (buffer|queue|array)` + +Accès +- `put` : ajout d'un élément +- `get` : récupération d'un élément + +Éléments clés +- Sémantique de file : les éléments ajoutés en premier sont récupérés en premier +- Buffer à *taille fixe* de `N` cases +- Utilisation de deux indices : têtes de lecture `r` et d'écriture `w` + +Utilité +- Séquençage d'information entre deux composants matériels +- File de messages (synchronisée) entre deux composants logiciels + +== Exemple d'exécution +#let ringbuf(buf, w, r) = cetz-canvas({ + import cetz.draw: * + grid((0,0), (buf.len(),1), step: 1) + translate(x: .5, y: .5) + for i in range(buf.len()) { + content((i, 0), [#buf.at(i)]) + } + translate(y: -0.75) + if (w != r) { + content((r,0), [`r`]) + content((w,0), [`w`]) + } else { + content((r,0), [`rw`]) + } +}) + +#grid( + columns: 2, + column-gutter: 3cm, + align: top, + grid( + columns: 2, + column-gutter: 1cm, + row-gutter: 5mm, + align: left+top, + [`init(4,0,0)`], ringbuf(([], [], [], []), 0, 0), pause, + [`put(3)`], ringbuf((3, [], [], []), 1, 0), pause, + [`put(5)`], ringbuf((3, 5, [], []), 2, 0), pause, + [`put(7)`], ringbuf((3, 5, 7, []), 3, 0), pause, + [`get()→3`], ringbuf((3, 5, 7, []), 3, 1), pause, + [`put(11)`], ringbuf((3, 5, 7, 11), 0, 1), pause, + ), + [ + #grid( + columns: 2, + column-gutter: 1cm, + row-gutter: 5mm, + align: left+top, + [`put(13)`], ringbuf((13, 5, 7, 11), 1, 1), pause, + [`put(17)`], [???] + ) + #pause + #v(1cm) + Plusieurs choix possibles selon l'implémentation ! + - `put` renvoie une erreur : le buffer est plein. + - `put` bloque jusqu'à ce que `5` soit récupéré. + - `put` écrase `5`.#h(1cm) #box(baseline: 100%, inset: (top: -5mm), ringbuf((13, 17, 7, 11), 2, 1)) + ], +) + +== Pseudocode d'implémentation — variante _écrase_ +```py +N = 4 +buf = [0, 0, 0, 0] +w = 0 +r = 0 + +def put(elem): + buf[w] = elem + w = (w + 1) % N + +def get(): + val = buf[r] + r = (r + 1) % N + return val +``` -- GitLab