-
CC=gcc
OBJ_FILES=$(shell find ./modules -name '*.c' | grep -Eo '^\.[^\.]*' | xargs printf '%s.o\n')
FLAGS=
all: $(TARGET)
clean:
- (rm $(OBJS) 2>/dev/null) || true
\ No newline at end of file
+ (rm $(OBJ_FILES) 2>/dev/null) || true
end
function love.draw()
-end
\ No newline at end of file
+end
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "utils.h"
+#include "graph_utils.h"
+#include "graph_types.h"
+
+
--- /dev/null
+#ifndef __GRAPH_ALGORITHM_H__
+#define __GRAPH_ALGORITHM_H__
+
+#endif
\ No newline at end of file
int luaopen_graphs(lua_State *L)
{
- printf("LOADING MODULE\n");
+ printf("LOADING MODULE...\n");
const luaL_Reg functions[] = {
{ "create_graph", create_graph },
{ "add_directed", add_directed },
{ "add_undirected", add_undirected },
{ "del_edge", del_edge },
+
+ { "get_nodes", get_nodes },
+ { "get_edges", get_edges },
+ { "print_graph", print_graph },
+
{ NULL, NULL }
};
luaL_register(L, "graphs", functions);
return 1;
-}
\ No newline at end of file
+}
header head = (header)lua_touserdata(L,1);
connect new_node = (connect)malloc(sizeof(node));
new_node->next_node = NULL;
+ new_node->neighbor_list = NULL;
if (head->node_count == 0)
{
while(walker->node_id != nid && walker != NULL){
if(walker->node_id > nid)
{
- puts("c'mon brendan...");
+ puts("NODE NOT FOUND FOR DELETE");
return 0;
}
follower = walker;
}
if (walker == NULL)
{
- puts("brother, this node don't exist");
+ puts("NODE NOT FOUND FOR DELETE");
return 0;
}
{
if (edge_walker->to_id == nid)
{
- edge_walker = edge_walker->next_edge;
if (edge_walker == node_walker->neighbor_list)
{
node_walker->neighbor_list = node_walker->neighbor_list->next_edge;
delete_walker->next_edge = edge_walker;
delete_walker = delete_walker->next_edge;
}
+ edge_walker = edge_walker->next_edge;
free(delete_walker);
}
else
}
return runner;
-}
+}
int node_id;
int edge_count;
struct node* next_node;
+
+ lua_Number x, y;
} node, *connect;
typedef struct {
-#include "graph_utils.h"
\ No newline at end of file
+#include "graph_utils.h"
+
+int get_nodes(lua_State *L)
+{
+ header head = (header) lua_touserdata(L, 1);
+ lua_pop(L, 1);
+
+ lua_newtable(L);
+
+ int index = 1;
+ for (connect jogger = head->front; jogger != NULL; jogger = jogger->next_node) {
+ lua_pushnumber(L, index);
+ lua_newtable(L);
+
+ lua_pushnumber(L, jogger->node_id);
+ lua_setfield(L, 3, "id");
+
+ lua_pushnumber(L, jogger->x);
+ lua_setfield(L, 3, "x");
+ lua_pushnumber(L, jogger->y);
+ lua_setfield(L, 3, "y");
+
+ lua_settable(L, 1);
+
+ index++;
+ }
+
+ return 1;
+}
+
+int get_edges(lua_State *L)
+{
+ header head = (header) lua_touserdata(L, 1);
+ lua_pop(L, 1);
+
+ lua_newtable(L);
+
+ int index = 1;
+ for (connect jogger = head->front; jogger != NULL; jogger = jogger->next_node) {
+ int node_id = jogger->node_id;
+
+ for (edge swimmer = jogger->neighbor_list; swimmer != NULL; swimmer = swimmer->next_edge) {
+ lua_pushnumber(L, index);
+ lua_newtable(L);
+
+ lua_pushnumber(L, swimmer->edge_id);
+ lua_setfield(L, 3, "id");
+
+ lua_pushnumber(L, node_id);
+ lua_setfield(L, 3, "from_node");
+
+ lua_pushnumber(L, swimmer->to_id);
+ lua_setfield(L, 3, "to_node");
+
+ lua_pushnumber(L, swimmer->weight);
+ lua_setfield(L, 3, "weight");
+
+ lua_settable(L, 1);
+
+ index++;
+ }
+ }
+
+ return 1;
+}
+
+
+int print_graph(lua_State *L)
+{
+ header head = (header)lua_touserdata(L,1);
+
+ connect node_walker = head->front;
+ edge edge_walker;
+
+ while (node_walker != NULL)
+ {
+ printf("%d: ", node_walker->node_id);
+ edge_walker = node_walker->neighbor_list;
+ while (edge_walker != NULL)
+ {
+ printf("(%d,%d), ", edge_walker->to_id, edge_walker->weight);
+ edge_walker = edge_walker->next_edge;
+ }
+ printf("\n");
+ node_walker = node_walker->next_node;
+ }
+
+ return 0;
+}
\ No newline at end of file
{
id = <edge_id>,
from_node = <node_id>,
- to_node = <node_id>
+ to_node = <node_id>,
+ weight = number,
}
*/
LUA_FUNCTION(get_edges);
+LUA_FUNCTION(print_graph);
#endif
\ No newline at end of file
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "utils.h"
+
+int top(sq_node_p stack_top)
+{
+ if(stack_top == NULL)
+ {
+ puts("STACK EMPTY");
+ return SQ_EMPTY;
+ }
+ return stack_top->value;
+}
+
+int front(sq_node_p queue_front)
+{
+ if(queue_front == NULL)
+ {
+ puts("QUEUE EMPTY");
+ return SQ_EMPTY;
+ }
+ return queue_front->value;
+}
+
+//FUNCTIONS HANDELING CHANGING THE STACK
+sq_node_p push(sq_node_p stack_top, int val)
+{
+ sq_node_p new_node = (sq_node_p)malloc(sizeof(sq_node));
+ new_node->value = val;
+ new_node->next = stack_top;
+ return new_node;
+}
+
+sq_node_p pop(sq_node_p stack_top)
+{
+ sq_node_p temp = stack_top;
+
+ if(temp == NULL)
+ {
+ puts("STACK IS ALREADY EMPTY");
+ return NULL;
+ }
+
+ stack_top = stack_top->next;
+
+ int n = temp->value;
+ free(temp);
+
+ return stack_top;
+}
+
+//FUNCTIONS HANDELING CHANGING THE QUEUE
+sq_node_p enque(sq_node_p front_of_queue, int val)
+{
+ sq_node_p new_node = (sq_node_p)malloc(sizeof(sq_node));
+ new_node->value = val;
+ new_node->next = NULL; //this will be at the back of the queue
+
+ if(front_of_queue == NULL)
+ front_of_queue = new_node;
+ else
+ {
+ sq_node_p runner = front_of_queue;
+
+ while(runner->next != NULL) //get to the end of the queue
+ {
+ runner = runner->next;
+ }
+
+ runner->next = new_node; //add new node to the end of the queue
+ }
+
+ return front_of_queue;
+}
+
+sq_node_p deque(sq_node_p front_of_queue)
+{
+ if(front_of_queue == NULL)
+ {
+ puts("QUEUE IS ALREADY EMPTY");
+ return NULL;
+ }
+
+ sq_node_p temp = front_of_queue;
+
+ front_of_queue = front_of_queue->next;
+
+ free(temp); //dump the removed queue
+
+ return front_of_queue;
+}
+
+void print_sq(sq_node_p sq)
+{
+ sq_node_p runner = sq;
+
+ while(runner != NULL)
+ {
+ printf("%d ", runner->value);
+ runner = runner->next;
+ }
+
+ puts("");
+}
\ No newline at end of file
--- /dev/null
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+#define SQ_EMPTY -8675309
+
+typedef struct sq_node {
+ int value;
+ struct sq_node * next;
+} sq_node, *sq_node_p;
+
+
+#endif
\ No newline at end of file
--- /dev/null
+require "graphs"
+
+local graph = graphs.create_graph()
+graphs.add_node(graph)
+graphs.add_node(graph)
+graphs.add_node(graph)
+graphs.add_undirected(graph,0,1,10)
+local edges = graphs.get_edges(graph)
+for k, v in ipairs(edges) do
+ print(k, v.id, v.from_node, v.to_node, v.weight)
+end
+
+graphs.del_node(graph,1)
+graphs.add_node(graph)
+--graphs.del_edge(graph,0)
+--graphs.print_graph(graph)
+
+local nodes = graphs.get_nodes(graph)
+for k, v in ipairs(nodes) do
+ print(k, v.id, v.x, v.y)
+end
\ No newline at end of file