summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h')
-rw-r--r--Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h b/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
new file mode 100644
index 00000000000..fafa78a1644
--- /dev/null
+++ b/Build/source/texk/web2c/mfluadir/otfcc/lib/bk/bkblock.h
@@ -0,0 +1,55 @@
+#ifndef CARYLL_BK_BLOCK_H
+#define CARYLL_BK_BLOCK_H
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+#include "caryll/ownership.h"
+#include "support/otfcc-alloc.h"
+#include "caryll/buffer.h"
+
+struct __caryll_bkblock;
+typedef enum {
+ bkover = 0, // nothing
+ b8 = 1, // byte
+ b16 = 2, // short
+ b32 = 3, // long
+ p16 = 0x10, // 16-bit offset, p = pointer to block
+ p32 = 0x11, // 32-bit offset, p = pointer to block
+ sp16 = 0x80, // 16-bit offset, p = pointer to block, marked as compact
+ sp32 = 0x81, // 32-bit offset, p = pointer to block, marked as compact
+ bkcopy = 0xFE, // Embed another block
+ bkembed = 0xFF // Embed another block
+} bk_CellType;
+typedef enum { VISIT_WHITE, VISIT_GRAY, VISIT_BLACK } bk_cell_visit_state;
+
+typedef struct {
+ bk_CellType t;
+ union {
+ uint32_t z;
+ struct __caryll_bkblock *p;
+ };
+} bk_Cell;
+
+typedef struct __caryll_bkblock {
+ bk_cell_visit_state _visitstate;
+ uint32_t _index;
+ uint32_t _height;
+ uint32_t _depth;
+ uint32_t length;
+ uint32_t free;
+ bk_Cell *cells;
+} bk_Block;
+
+bk_Block *_bkblock_init(void);
+bk_Block *bk_new_Block(int type0, ...);
+bk_Block *bk_push(bk_Block *b, int type0, ...);
+bk_Block *bk_newBlockFromStringLen(size_t len, const char *str);
+bk_Block *bk_newBlockFromBuffer(MOVE caryll_Buffer *buf);
+bk_Block *bk_newBlockFromBufferCopy(OBSERVE caryll_Buffer *buf);
+bool bk_cellIsPointer(bk_Cell *cell);
+void bk_printBlock(bk_Block *b);
+
+#endif