summaryrefslogtreecommitdiff
path: root/src/command.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/command.h')
-rw-r--r--src/command.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/command.h b/src/command.h
new file mode 100644
index 0000000..9515282
--- /dev/null
+++ b/src/command.h
@@ -0,0 +1,34 @@
+#include <stdint.h>
+
+struct buffer;
+
+typedef void (*command_fn)(struct buffer *buffer);
+
+struct command {
+ const char *name;
+ command_fn fn;
+};
+
+struct hashed_command {
+ uint32_t hash;
+ struct command *command;
+};
+
+struct commands {
+ struct hashed_command *commands;
+ uint32_t ncommands;
+ uint32_t capacity;
+};
+
+struct commands command_list_create(uint32_t capacity);
+void command_list_destroy(struct commands *commands);
+
+uint32_t register_command(struct commands *commands, struct command *command);
+void register_commands(struct commands *command_list, struct command *commands,
+ uint32_t ncommands);
+
+uint32_t hash_command_name(const char *name);
+
+struct command *lookup_command(struct commands *commands, const char *name);
+struct command *lookup_command_by_hash(struct commands *commands,
+ uint32_t hash);