diff options
author | Christian C <cc@localhost> | 2025-03-23 15:34:48 -0700 |
---|---|---|
committer | Christian C <cc@localhost> | 2025-03-23 15:34:48 -0700 |
commit | 22c32ae8649e8540198942b33d4bab72c4ea7238 (patch) | |
tree | 946e173c4ab362ec88f21854e8613a21c330a6e1 /lib | |
parent | 981e8bfd12f79cb469bb54a915230eda6dafab41 (diff) |
Userspace types
Diffstat (limited to 'lib')
-rw-r--r-- | lib/algo/avl_tree.c | 48 | ||||
-rw-r--r-- | lib/data/image_types.c | 12 | ||||
-rw-r--r-- | lib/png.c | 2 | ||||
-rw-r--r-- | lib/seg/mask_data.c | 82 | ||||
-rw-r--r-- | lib/seg/util.c | 12 |
5 files changed, 78 insertions, 78 deletions
diff --git a/lib/algo/avl_tree.c b/lib/algo/avl_tree.c index 9ac5d47..7b86bab 100644 --- a/lib/algo/avl_tree.c +++ b/lib/algo/avl_tree.c @@ -5,7 +5,7 @@ #include <stdio.h> // Get the height of an AVL node -AvlHeight_t get_height(struct AVLNode* node) +AvlHeight_t get_height(AVLNode* node) { if (node == NULL) { return 0; @@ -20,7 +20,7 @@ AvlHeight_t max_height(AvlHeight_t a, AvlHeight_t b) } // Get the balance factor of a node -ssize_t get_balance_factor(struct AVLNode* node) +ssize_t get_balance_factor(AVLNode* node) { if (node == NULL) { return 0; @@ -29,10 +29,10 @@ ssize_t get_balance_factor(struct AVLNode* node) } // Rotate an AVL node right -struct AVLNode* right_rotate(struct AVLNode* parent) +AVLNode* right_rotate(AVLNode* parent) { - struct AVLNode* child1 = parent->left; - struct AVLNode* child2 = child1->right; + AVLNode* child1 = parent->left; + AVLNode* child2 = child1->right; child1->right = parent; parent->left = child2; @@ -43,10 +43,10 @@ struct AVLNode* right_rotate(struct AVLNode* parent) } // Rotate an AVL node left -struct AVLNode* left_rotate(struct AVLNode* parent) +AVLNode* left_rotate(AVLNode* parent) { - struct AVLNode* child1 = parent->right; - struct AVLNode* child2 = child1->left; + AVLNode* child1 = parent->right; + AVLNode* child2 = child1->left; child1->left = parent; parent->right = child2; @@ -57,9 +57,9 @@ struct AVLNode* left_rotate(struct AVLNode* parent) } // Create AVL node -struct AVLNode* create_avl_node(void* data, AvlComparator compare) +AVLNode* create_avl_node(void* data, AvlComparator compare) { - struct AVLNode* node = (struct AVLNode*)malloc(sizeof(struct AVLNode)); + AVLNode* node = (AVLNode*)malloc(sizeof(AVLNode)); if (node == NULL) { return NULL; } @@ -72,12 +72,12 @@ struct AVLNode* create_avl_node(void* data, AvlComparator compare) } // Insert data into AVL tree -struct Result avl_insert(struct AVLNode* node, void* data, AvlComparator compare) +Result avl_insert(AVLNode* node, void* data, AvlComparator compare) { - struct Result result; + Result result; // 1. Standard BST insertion if (node == NULL) { - return (struct Result) {create_avl_node(data, compare), TRUE}; + return (Result) {create_avl_node(data, compare), TRUE}; } if (node->compare(data, node->data)) { @@ -86,16 +86,16 @@ struct Result avl_insert(struct AVLNode* node, void* data, AvlComparator compare fprintf(stderr, "Failed to insert!"); return result; } - node->left = (struct AVLNode*)result.data; + node->left = (AVLNode*)result.data; } else if (node->compare(node->data, data)) { result = avl_insert(node->right, data, compare); if (!result.success) { fprintf(stderr, "Failed to insert!"); return result; } - node->right = (struct AVLNode*)result.data; + node->right = (AVLNode*)result.data; } else { - return (struct Result) {node, FALSE}; + return (Result) {node, FALSE}; } // 2. Update height of the ancestor node @@ -107,25 +107,25 @@ struct Result avl_insert(struct AVLNode* node, void* data, AvlComparator compare // LeftLeft if ((balance > 1) && node->compare(data, node->left->data)) { - return (struct Result) {right_rotate(node), TRUE}; + return (Result) {right_rotate(node), TRUE}; } // RightRight if ((balance < -1) && node->compare(node->right->data, data)) { - return (struct Result) {left_rotate(node), TRUE}; + return (Result) {left_rotate(node), TRUE}; } // LeftRight if ((balance > 1) && node->compare(node->left->data, data)) { - return (struct Result) {right_rotate(node), TRUE}; + return (Result) {right_rotate(node), TRUE}; } // RightLeft if ((balance < -1) && node->compare(data,node->right->data)) { - return (struct Result) {left_rotate(node), TRUE}; + return (Result) {left_rotate(node), TRUE}; } - return (struct Result) {node, TRUE}; + return (Result) {node, TRUE}; } // In-order traversal print pointer -void print_in_order(struct AVLNode* root) +void print_in_order(AVLNode* root) { if (root != NULL) { print_in_order(root->left); @@ -135,7 +135,7 @@ void print_in_order(struct AVLNode* root) } // Free avl tree nodes starting at root -void free_avl_tree(struct AVLNode* root) +void free_avl_tree(AVLNode* root) { if (root != NULL) { free_avl_tree(root->left); @@ -145,7 +145,7 @@ void free_avl_tree(struct AVLNode* root) } // Free avl tree and their data starting at root -void free_avl_tree_nodes(struct AVLNode* root) +void free_avl_tree_nodes(AVLNode* root) { if (root != NULL) { free_avl_tree_nodes(root->left); diff --git a/lib/data/image_types.c b/lib/data/image_types.c index c33a88e..0375a24 100644 --- a/lib/data/image_types.c +++ b/lib/data/image_types.c @@ -1,9 +1,9 @@ #include <lib/data/image_types.h> #include <stdlib.h> -struct Image* create_image(size_t width, size_t height) +Image* create_image(size_t width, size_t height) { - struct Image* ip = (struct Image*)malloc(sizeof(struct Image)); + Image* ip = (Image*)malloc(sizeof(Image)); ip->width = width; ip->height = height; ip->image = (ImageData_t**)malloc(sizeof(ImageData_t*) * ip->height); @@ -14,9 +14,9 @@ struct Image* create_image(size_t width, size_t height) return ip; } -struct ImageMask* create_image_mask(size_t width, size_t height) +ImageMask* create_image_mask(size_t width, size_t height) { - struct ImageMask* ip = (struct ImageMask*)malloc(sizeof(struct ImageMask)); + ImageMask* ip = (ImageMask*)malloc(sizeof(ImageMask)); ip->width = width; ip->height = height; ip->mask = (ImageMaskData_t**)malloc(sizeof(ImageMaskData_t*) * ip->height); @@ -27,7 +27,7 @@ struct ImageMask* create_image_mask(size_t width, size_t height) return ip; } -void free_image(struct Image* image) +void free_image(Image* image) { if (image->image[0] != NULL) { free(image->image[0]); @@ -42,7 +42,7 @@ void free_image(struct Image* image) } } -void free_image_mask(struct ImageMask* image_mask) +void free_image_mask(ImageMask* image_mask) { if (image_mask->mask[0] != NULL) { free(image_mask->mask[0]); @@ -4,7 +4,7 @@ #include <png.h> // Save bitmap to file -void save_png(struct bitmap_t* bitmap, char* fname) +void save_png(Bitmap* bitmap, char* fname) { FILE *fp; png_structp png_ptr = NULL; diff --git a/lib/seg/mask_data.c b/lib/seg/mask_data.c index dc3a811..52a3ac4 100644 --- a/lib/seg/mask_data.c +++ b/lib/seg/mask_data.c @@ -4,9 +4,9 @@ #include <stdio.h> // Allocate Mask Data for Label -struct MaskData* create_mask_data(ImageMaskData_t label) +MaskData* create_mask_data(ImageMaskData_t label) { - struct MaskData *data = (struct MaskData*)malloc(sizeof(struct MaskData)); + MaskData *data = (MaskData*)malloc(sizeof(MaskData)); data->label = label; data->area = 0; data->perimeter = 0; @@ -14,15 +14,15 @@ struct MaskData* create_mask_data(ImageMaskData_t label) } // Compare mask data labels -bool_t compare_labels(struct MaskData* left, struct MaskData* right) +bool_t compare_labels(MaskData* left, MaskData* right) { return left->label < right->label; } // Create AVL Mask node -struct AVLNode* create_avl_mask_node(struct MaskData* data) +AVLNode* create_avl_mask_node(MaskData* data) { - struct AVLNode* node = (struct AVLNode*)malloc(sizeof(struct AVLNode)); + AVLNode* node = (AVLNode*)malloc(sizeof(AVLNode)); if (node == NULL) { return NULL; } @@ -35,31 +35,31 @@ 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) +Result insert_mask(AVLNode* node, MaskData* data) { - struct Result result; + Result result; // 1. Standard BST insertion if (node == NULL) { - return (struct Result) {create_avl_mask_node(data), TRUE}; + return (Result) {create_avl_mask_node(data), TRUE}; } - struct MaskData *node_data = (struct MaskData*)node->data; + MaskData *node_data = (MaskData*)node->data; if (node->compare(data, node_data)) { result = insert_mask(node->left, data); if (!result.success) { fprintf(stderr, "Failed to insert!"); return result; } - node->left = (struct AVLNode*)result.data; + node->left = (AVLNode*)result.data; } else if (node->compare(node->data, data)) { result = insert_mask(node->right, data); if (!result.success) { fprintf(stderr, "Failed to insert!"); return result; } - node->right = (struct AVLNode*)result.data; + node->right = (AVLNode*)result.data; } else { - return (struct Result) {node, FALSE}; + return (Result) {node, FALSE}; } // 2. Update height of the ancestor node @@ -71,53 +71,53 @@ struct Result insert_mask(struct AVLNode* node, struct MaskData* data) // LeftLeft if ((balance > 1) && node->compare(data, node->left->data)) { - return (struct Result) {right_rotate(node), TRUE}; + return (Result) {right_rotate(node), TRUE}; } // RightRight if ((balance < -1) && node->compare(node->right->data, data)) { - return (struct Result) {left_rotate(node), TRUE}; + return (Result) {left_rotate(node), TRUE}; } // LeftRight if ((balance > 1) && node->compare(node->left->data, data)) { - return (struct Result) {right_rotate(node), TRUE}; + return (Result) {right_rotate(node), TRUE}; } // RightLeft if ((balance < -1) && node->compare(data,node->right->data)) { - return (struct Result) {left_rotate(node), TRUE}; + return (Result) {left_rotate(node), TRUE}; } - return (struct Result) {node, TRUE}; + return (Result) {node, TRUE}; } // Allocate a label's Mask data in a tree // If it already exists, skip the allocation -struct AVLNode* insert_mask_alloc(struct AVLNode* node, ImageMaskData_t label) +AVLNode* insert_mask_alloc(AVLNode* node, ImageMaskData_t label) { - struct MaskData* data = create_mask_data(label); - struct Result result = insert_mask(node, data); + MaskData* data = create_mask_data(label); + Result result = insert_mask(node, data); if (!result.success) { free(data); } - return (struct AVLNode*)result.data; + return (AVLNode*)result.data; } // Print AVL Node Mask Data Label -void print_label(struct AVLNode* root) +void print_label(AVLNode* root) { if (root != NULL) { print_label(root->left); - struct MaskData* data = root->data; + MaskData* data = root->data; printf("%d: (%zu, %zu) ", data->label, data->area, data->perimeter); print_label(root->right); } } // Increase the label's area -bool_t increase_label_area(struct AVLNode* root, ImageMaskData_t label) +bool_t increase_label_area(AVLNode* root, ImageMaskData_t label) { if (root == NULL) { return FALSE; } - struct MaskData* data = (struct MaskData*)root->data; + MaskData* data = (MaskData*)root->data; if (data->label == label) { data->area++; } @@ -131,12 +131,12 @@ bool_t increase_label_area(struct AVLNode* root, ImageMaskData_t label) } // Increase the label's perimeter -bool_t increase_label_perimeter(struct AVLNode* root, ImageMaskData_t label) +bool_t increase_label_perimeter(AVLNode* root, ImageMaskData_t label) { if (root == NULL) { return FALSE; } - struct MaskData* data = (struct MaskData*)root->data; + MaskData* data = (MaskData*)root->data; if (data->label == label) { data->perimeter++; } @@ -151,9 +151,9 @@ bool_t increase_label_perimeter(struct AVLNode* root, ImageMaskData_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, ImageMaskData_t label) +AVLNode* increase_label_area_alloc(AVLNode* root, ImageMaskData_t label) { - struct AVLNode* new_root = root; + AVLNode* new_root = root; bool_t success = increase_label_area(new_root, label); if (success == FALSE) { new_root = insert_mask_alloc(new_root, label); @@ -164,9 +164,9 @@ struct AVLNode* increase_label_area_alloc(struct AVLNode* root, ImageMaskData_t // Increase the label's perimeter // Create an AVL node if it doesn't exist -struct AVLNode* increase_label_perimeter_alloc(struct AVLNode* root, ImageMaskData_t label) +AVLNode* increase_label_perimeter_alloc(AVLNode* root, ImageMaskData_t label) { - struct AVLNode* new_root = root; + AVLNode* new_root = root; bool_t success = increase_label_perimeter(new_root, label); if (success == FALSE) { new_root = insert_mask_alloc(new_root, label); @@ -182,7 +182,7 @@ bool_t compare_image_mask_data_t(ImageMaskData_t* s1, ImageMaskData_t* s2) } // In-order traversal print pointer -void print_in_order_image_mask_data_t(struct AVLNode* root) +void print_in_order_image_mask_data_t(AVLNode* root) { if (root != NULL) { print_in_order_image_mask_data_t(root->left); @@ -192,7 +192,7 @@ void print_in_order_image_mask_data_t(struct AVLNode* root) } // Check if ImageMaskData_t in AVLTree with ImageMaskData_t* data -bool_t in_image_mask_data_t_tree(struct AVLNode* root, ImageMaskData_t value) +bool_t in_image_mask_data_t_tree(AVLNode* root, ImageMaskData_t value) { if (root == NULL) { return FALSE; @@ -208,15 +208,15 @@ bool_t in_image_mask_data_t_tree(struct AVLNode* root, ImageMaskData_t value) // Filter out small masks // Assumption: Contiguous labeling -struct AVLNode* get_small_labels(struct AVLNode* removal_tree, struct AVLNode* label_tree, size_t min_area, size_t min_perimeter) +AVLNode* get_small_labels(AVLNode* removal_tree, AVLNode* label_tree, size_t min_area, size_t min_perimeter) { - struct AVLNode* return_tree = removal_tree; + AVLNode* return_tree = removal_tree; if (label_tree != NULL) { return_tree = get_small_labels(return_tree, label_tree->left, min_area, min_perimeter); - struct MaskData* node_data = (struct MaskData*)label_tree->data; + MaskData* node_data = (MaskData*)label_tree->data; if ((node_data->area < min_area) || (node_data->perimeter < min_perimeter)) { // Insert - struct Result result = avl_insert(return_tree, &node_data->label, (bool_t (*)(void*,void*))compare_image_mask_data_t); + Result result = avl_insert(return_tree, &node_data->label, (bool_t (*)(void*,void*))compare_image_mask_data_t); if (result.success) { return_tree = result.data; } @@ -227,9 +227,9 @@ struct AVLNode* get_small_labels(struct AVLNode* removal_tree, struct AVLNode* l } // Get mask label data -struct AVLNode* get_mask_data(ImageMaskData_t* masks, uint32_t width, uint32_t height) +AVLNode* get_mask_data(ImageMaskData_t* masks, uint32_t width, uint32_t height) { - struct AVLNode* root = NULL; + AVLNode* root = NULL; for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { size_t coord = x + y*width; @@ -247,8 +247,8 @@ struct AVLNode* get_mask_data(ImageMaskData_t* masks, uint32_t width, uint32_t h // Filter out small masks in mask void filter_small_masks(ImageMaskData_t* masks, uint32_t width, uint32_t height, size_t min_area, size_t min_perimeter) { - struct AVLNode* root = get_mask_data(masks, width, height); - struct AVLNode* small_label_tree = NULL; + AVLNode* root = get_mask_data(masks, width, height); + AVLNode* small_label_tree = NULL; small_label_tree = get_small_labels(NULL, root, min_area, min_perimeter); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { diff --git a/lib/seg/util.c b/lib/seg/util.c index 2952952..6eee1a2 100644 --- a/lib/seg/util.c +++ b/lib/seg/util.c @@ -202,7 +202,7 @@ void closeup(ImageMaskData_t** mask, uint32_t width, uint32_t height, size_t num // Combine Label Masks // For all empty spaces in the destination, put the extra label if it exists // Allocates an array if destination is unallocated -struct ImageMask* combine_masks(struct ImageMask *destination, struct ImageMask *extra_labels) +ImageMask* combine_masks(ImageMask *destination, ImageMask *extra_labels) { if (destination == NULL) { destination = create_image_mask(extra_labels->width, extra_labels->height); @@ -220,7 +220,7 @@ struct ImageMask* combine_masks(struct ImageMask *destination, struct ImageMask // Process Tif File to Labels // width, height will be overwritten with image dimensions // starting_label_p will be incremented for each label found in the image -struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *height, ImageMaskData_t *starting_label_p) +ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t *height, ImageMaskData_t *starting_label_p) { TIFFSetWarningHandler(TiffDummyHandler); //-TIFF-IMAGE-OPEN------------------------------- @@ -268,7 +268,7 @@ struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t * //-FLOOD-FILL-SEGMENTATION----------------------- //-CONTIGUOUS-REGION-FINDING--------------------- - struct ImageMask *im_data = create_image_mask((size_t)*width, (size_t)*height); + ImageMask *im_data = create_image_mask((size_t)*width, (size_t)*height); if (im_data == NULL) { fprintf(stderr, "Memory allocation error\n"); free(image_data); @@ -316,13 +316,13 @@ struct ImageMask* tif_to_labels(char* tif_file_name, uint32_t *width, uint32_t * } // Convert mask to bitmap -struct bitmap_t* image_mask_data_to_bitmap(ImageMaskData_t* buffer, uint32_t width, uint32_t height) +Bitmap* image_mask_data_to_bitmap(ImageMaskData_t* buffer, uint32_t width, uint32_t height) { - struct pixel_t* out_buffer = (struct pixel_t*)calloc(width*height, sizeof(struct pixel_t)); + Pixel* out_buffer = (Pixel*)calloc(width*height, sizeof(Pixel)); if (out_buffer == NULL) { return NULL; } - struct bitmap_t* bitmap = (struct bitmap_t*)malloc(sizeof(struct bitmap_t)); + Bitmap* bitmap = (Bitmap*)malloc(sizeof(Bitmap)); if (bitmap == NULL) { free(out_buffer); return NULL; |