git subrepo clone https://github.com/libretro/libretro-common.git deps/libretro-common
[pcsx_rearmed.git] / deps / libretro-common / include / libchdr / bitstream.h
diff --git a/deps/libretro-common/include/libchdr/bitstream.h b/deps/libretro-common/include/libchdr/bitstream.h
new file mode 100644 (file)
index 0000000..271c89c
--- /dev/null
@@ -0,0 +1,42 @@
+/* license:BSD-3-Clause
+ * copyright-holders:Aaron Giles
+***************************************************************************
+
+    bitstream.h
+
+    Helper classes for reading/writing at the bit level.
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __BITSTREAM_H__
+#define __BITSTREAM_H__
+
+#include <stdint.h>
+
+/***************************************************************************
+ *  TYPE DEFINITIONS
+ ***************************************************************************
+ */
+
+/* helper class for reading from a bit buffer */
+struct bitstream
+{
+       uint32_t          buffer;       /* current bit accumulator */
+       int               bits;         /* number of bits in the accumulator */
+       const uint8_t *   read;         /* read pointer */
+       uint32_t          doffset;      /* byte offset within the data */
+       uint32_t          dlength;      /* length of the data */
+};
+
+struct bitstream*      create_bitstream(const void *src, uint32_t srclength);
+int                            bitstream_overflow(struct bitstream* bitstream);
+uint32_t                       bitstream_read_offset(struct bitstream* bitstream);
+
+uint32_t                       bitstream_read(struct bitstream* bitstream, int numbits);
+uint32_t                       bitstream_peek(struct bitstream* bitstream, int numbits);
+void                           bitstream_remove(struct bitstream* bitstream, int numbits);
+uint32_t                       bitstream_flush(struct bitstream* bitstream);
+
+#endif