feat: (twimap) provide an easy way for mapping kernel objects into filesystem
[lunaix-os.git] / lunaix-os / includes / lunaix / fs / twifs.h
index 563411223d8d5d258110e73b26e7d70024888500..b194066afe07c791902f1e71e8365376737ad761 100644 (file)
@@ -2,6 +2,7 @@
 #define __LUNAIX_TWIFS_H
 
 #include <lunaix/fs.h>
 #define __LUNAIX_TWIFS_H
 
 #include <lunaix/fs.h>
+#include <lunaix/spike.h>
 
 struct twifs_node
 {
 
 struct twifs_node
 {
@@ -25,9 +26,30 @@ struct twifs_node
     } ops;
 };
 
     } ops;
 };
 
+struct twimap
+{
+    void* index;
+    void* buffer;
+    void* data;
+    size_t size_acc;
+    void (*read)(struct twimap* mapping);
+    int (*go_next)(struct twimap* mapping);
+    void (*reset)(struct twimap* mapping);
+};
+
+#define twinode_getdata(inode, type)                                           \
+    ({                                                                         \
+        struct twifs_node* twinode = (struct twifs_node*)(inode)->data;        \
+        assert(twinode);                                                       \
+        (type) twinode->data;                                                  \
+    })
+
 void
 twifs_init();
 
 void
 twifs_init();
 
+struct twifs_node*
+twifs_file_node_vargs(struct twifs_node* parent, const char* fmt, va_list args);
+
 struct twifs_node*
 twifs_file_node(struct twifs_node* parent, const char* fmt, ...);
 
 struct twifs_node*
 twifs_file_node(struct twifs_node* parent, const char* fmt, ...);
 
@@ -37,4 +59,19 @@ twifs_dir_node(struct twifs_node* parent, const char* fmt, ...);
 int
 twifs_rm_node(struct twifs_node* node);
 
 int
 twifs_rm_node(struct twifs_node* node);
 
+#define twimap_index(twimap, type) ((type)((twimap)->index))
+#define twimap_data(twimap, type) ((type)((twimap)->data))
+
+struct twimap*
+twifs_mapping(struct twifs_node* parent, void* data, const char* fmt, ...);
+
+void
+twimap_printf(struct twimap* mapping, const char* fmt, ...);
+
+int
+twimap_memcpy(struct twimap* mapping, const void* src, const size_t len);
+
+int
+twimap_memappend(struct twimap* mapping, const void* src, const size_t len);
+
 #endif /* __LUNAIX_TWIFS_H */
 #endif /* __LUNAIX_TWIFS_H */