From 74e46ee7709785f91e04ac42619e4a7e9f90bc18 Mon Sep 17 00:00:00 2001
From: Christian C <cc@localhost>
Date: Wed, 5 Mar 2025 16:14:18 -0800
Subject: Modularize

---
 include/lib/seg/mask_data.h | 46 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 include/lib/seg/mask_data.h

(limited to 'include/lib/seg')

diff --git a/include/lib/seg/mask_data.h b/include/lib/seg/mask_data.h
new file mode 100644
index 0000000..595ffd6
--- /dev/null
+++ b/include/lib/seg/mask_data.h
@@ -0,0 +1,46 @@
+#ifndef INC_LIB_SEG_MASK_DATA_H
+#define INC_LIB_SEG_MASK_DATA_H
+
+#include <lib/algo/avl_tree.h>
+#include <lib/monad.h>
+
+struct MaskData {
+  uint16_t label;
+  size_t area;
+  size_t perimeter;
+};
+
+// Allocate Mask Data for Label
+struct MaskData* create_mask_data(uint16_t label);
+
+// Compare mask data labels
+bool_t compare_labels(struct MaskData* left, struct MaskData* right);
+
+// Create AVL Mask node
+struct AVLNode* create_avl_mask_node(struct MaskData* data);
+
+// Insert MaskData into the AVL Tree
+struct Result insert_mask(struct AVLNode* node, struct MaskData* data);
+
+// Allocate a label's Mask data in a tree
+//  If it already exists, skip the allocation
+struct AVLNode* insert_mask_alloc(struct AVLNode* node, uint16_t label);
+
+// Print AVL Node Mask Data Label
+void print_label(struct AVLNode* root);
+
+// Increase the label's area
+bool_t increase_label_area(struct AVLNode* root, uint16_t label);
+
+// Increase the label's perimeter
+bool_t increase_label_perimeter(struct AVLNode* root, uint16_t label);
+
+// Increase the label's area
+//  Create an AVL node if it doesn't exist
+struct AVLNode* increase_label_area_alloc(struct AVLNode* root, uint16_t label);
+
+// Increase the label's perimeter
+//  Create an AVL node if it doesn't exist
+struct AVLNode* increase_label_perimeter_alloc(struct AVLNode* root, uint16_t label);
+
+#endif
-- 
cgit v1.2.1