parallax 1.0
command-line based task/todo manager
Loading...
Searching...
No Matches
task.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include <stdio.h>
3#include <string.h>
4#include "task.h"
5#include "hashmap.h"
6
7#define MAX_CLASS_LENGTH 256
8#define MAX_CONTENT_LENGTH 2056
9
15
16Task* create_task(char* class_of_task, char* task_content)
17{
18 Task* task = (Task*)malloc(sizeof(Task));
19 task->task_class = class_of_task;
20 task->task_content = task_content;
21 return task;
22}
23
24TaskClass* create_task_class(char* class_name, size_t class_size)
25{
29 TaskClass* task_class = (TaskClass*)malloc(sizeof(TaskClass));
30 task_class->task_class_name = class_name;
31 task_class->table_size = class_size;
32 task_class->task_class_table = hashmap_create(class_size);
33 return task_class;
34}
35
36TaskCollection* create_task_collection(size_t collection_size)
37{
41 TaskCollection* task_collection = (TaskCollection*)malloc(sizeof(TaskCollection));
42 task_collection->collection_size = collection_size;
43 task_collection->task_collection = hashmap_create(collection_size);
44 return task_collection;
45}
46
47Task* get_task(TaskClass* task_class, const char* key)
48{
54 if ( task_class == NULL || key == NULL )
55 {
56 printf("Task class error: task class or key is null\n");
57 return NULL;
58 }
59 if (task_class->table_size <= 0)
60 {
61 printf("Task class error: invalid table size (%zu)", task_class->table_size);
62 return NULL;
63 }
64
65 void* ret = hashmap_get(task_class->task_class_table, key);
66 if (ret == NULL)
67 {
68 return NULL;
69 }
70
71 return (Task*)ret; //cast into Task type
72}
73
74void add_task(TaskClass* task_class, Task* new_task)
75{
79 if ( task_class == NULL || new_task->task_content == NULL )
80 {
81 printf("Task class error: task class or key is null\n");
82 return;
83 }
84 if ( new_task == NULL )
85 {
86 printf("Task class error: new task to be added is null\n");
87 return;
88 }
89 if ( task_class->table_size <= 0 )
90 {
91 printf("Task class error: invalid table size (%zu)", task_class->table_size);
92 return;
93 }
94
95 hashmap_set(task_class->task_class_table, new_task->task_content, new_task);
96}
97
98TaskClass* get_task_class(TaskCollection* task_collection, const char* key)
99{
105 if (task_collection == NULL || key == NULL)
106 {
107 return NULL;
108 }
109 if (task_collection->collection_size <= 0)
110 {
111 return NULL;
112 }
113
114 void* ret = hashmap_get(task_collection->task_collection, key);
115
116 if (ret == NULL)
117 {
118 return NULL;
119 }
120 return (TaskClass*)ret; // Cast into a TaskClass type
121}
122
123void add_task_class(TaskCollection* task_collection, TaskClass* task_class)
124{
128 if (task_collection == NULL || task_class == NULL)
129 {
130 return;
131 }
132 if (task_class->task_class_name == NULL)
133 {
134 return;
135 }
136
137 hashmap_set(task_collection->task_collection, task_class->task_class_name, task_class);
138}
139
140void remove_task(TaskClass* task_class, char* task_content)
141{
145 if (task_class == NULL || task_content == NULL)
146 {
147 return;
148 }
149 if (task_class->task_class_table == NULL)
150 {
151 return;
152 }
153 hashmap_elem_remove(task_class->task_class_table, task_content);
154}
155
156void remove_task_class(TaskCollection* task_collection, char* class_name)
157{
161 if (task_collection == NULL || class_name == NULL)
162 {
163 return;
164 }
165 if (task_collection->task_collection == NULL)
166 {
167 return;
168 }
169 hashmap_elem_remove(task_collection->task_collection, class_name);
170}
171
172void print_task(Task* task)
173{
177 if (task == NULL)
178 {
179 return;
180 }
181 printf("Task class: %s\nContent: %s\n", task->task_class, task->task_content);
182}
183
184
185
HashMap * hashmap_create(size_t table_size)
Creates a hashmap of a fixed size.
Definition hashmap.c:32
void hashmap_set(HashMap *map, char *key, void *value)
Adds an entry to a hashmap by a key string and value.
Definition hashmap.c:42
void hashmap_elem_remove(HashMap *map, char *key)
Removes an entry in a hashmap by its key.
Definition hashmap.c:102
void * hashmap_get(HashMap *map, char *key)
Finds an entry in a non-empty hashmap by a key.
Definition hashmap.c:80
Contains the structures and procedures for hashmap-related operations.
A task class containing other tasks.
Definition task.h:40
char * task_class_name
Definition task.h:41
size_t table_size
Definition task.h:42
HashMap * task_class_table
Definition task.h:43
A task collection containing other classes.
Definition task.h:53
HashMap * task_collection
Definition task.h:54
size_t collection_size
Definition task.h:55
A basic task.
Definition task.h:29
char * task_content
Definition task.h:31
char * task_class
Definition task.h:30
void remove_task(TaskClass *task_class, char *task_content)
Removes a task from a task class by its content.
Definition task.c:140
TaskClass * get_task_class(TaskCollection *task_collection, const char *key)
Gets a task class by its class name from a task collection.
Definition task.c:98
void add_task_class(TaskCollection *task_collection, TaskClass *task_class)
Adds a task class to a task collection.
Definition task.c:123
TaskCollection * create_task_collection(size_t collection_size)
Creates a task collection of known size.
Definition task.c:36
Task * create_task(char *class_of_task, char *task_content)
Creates a task of known class and content.
Definition task.c:16
void remove_task_class(TaskCollection *task_collection, char *class_name)
Removes a task class from a task collection.
Definition task.c:156
Task * get_task(TaskClass *task_class, const char *key)
Finds a task in a task class by its content.
Definition task.c:47
TaskClass * create_task_class(char *class_name, size_t class_size)
Creates a task class of a known class and size.
Definition task.c:24
void add_task(TaskClass *task_class, Task *new_task)
Adds a task to a task class.
Definition task.c:74
void print_task(Task *task)
Prints the content of a task.
Definition task.c:172
Contains structures and functions for handling task-related operations.