From 33e1a95ba9f1d33ebfc000fb8dccb5e19199ad3f Mon Sep 17 00:00:00 2001 From: Joshua Suskalo Date: Wed, 1 Jan 2025 20:12:04 -0500 Subject: [PATCH] Remove duplicate c-layout implementation Signed-off-by: Kristin Rutenkolk --- src/clj/coffi/layout.clj | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/src/clj/coffi/layout.clj b/src/clj/coffi/layout.clj index 810a41f..1521c7c 100644 --- a/src/clj/coffi/layout.clj +++ b/src/clj/coffi/layout.clj @@ -3,29 +3,8 @@ (:require [coffi.mem :as mem])) -(defn with-c-layout - "Forces a struct specification to C layout rules. - - This will add padding fields between fields to match C alignment - requirements." - [struct-spec] - (let [aligned-fields - (loop [offset 0 - aligned-fields [] - fields (nth struct-spec 1)] - (if (seq fields) - (let [[[_ type :as field] & fields] fields - size (mem/size-of type) - align (mem/align-of type) - r (rem offset align)] - (recur (cond-> (+ offset size) - (pos? r) (+ (- align r))) - (cond-> aligned-fields - (pos? r) (conj [::padding [::mem/padding (- align r)]]) - :always (conj field)) - fields)) - (let [strongest-alignment (reduce max (map (comp mem/align-of second) (nth struct-spec 1))) - r (rem offset strongest-alignment)] - (cond-> aligned-fields - (pos? r) (conj [::padding [::mem/padding (- strongest-alignment r)]])))))] - (assoc struct-spec 1 aligned-fields))) +(def with-c-layout + @#'mem/with-c-layout) +(alter-meta! #'with-c-layout #(merge (-> (meta #'mem/with-c-layout) + (dissoc :private)) + %))