summaryrefslogtreecommitdiff
path: root/src/dictzip-input-stream.h
diff options
context:
space:
mode:
authorPřemysl Janouch <p.janouch@gmail.com>2013-07-14 20:40:58 +0200
committerPřemysl Janouch <p.janouch@gmail.com>2013-07-18 00:16:43 +0200
commit15f62b7054c12bff2899ac6bd73147b6bfc818fe (patch)
tree9316baf417aa91c5973f30c86897570defbc571f /src/dictzip-input-stream.h
parentc2e870937298a8a58b5a94ab24e419c3230a6ba6 (diff)
downloadtdv-15f62b7054c12bff2899ac6bd73147b6bfc818fe.tar.gz
tdv-15f62b7054c12bff2899ac6bd73147b6bfc818fe.tar.xz
tdv-15f62b7054c12bff2899ac6bd73147b6bfc818fe.zip
Add a class to handle dictzip files
Provides pseudo-random access to dictionary files compressed using dictzip. It doesn't implement a cache, it just loads missing chunks until it has the whole file. I'm not sure if discarding not recently used chunks is really a useful feature. If there _was_ a way to get noticed when system memory is low, I think the best way to handle that event would be to simply release it all. All in all, this is pretty useless. But it was interesting to write. This has yet to be integrated into the application proper.
Diffstat (limited to 'src/dictzip-input-stream.h')
-rw-r--r--src/dictzip-input-stream.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/dictzip-input-stream.h b/src/dictzip-input-stream.h
new file mode 100644
index 0000000..b9d039c
--- /dev/null
+++ b/src/dictzip-input-stream.h
@@ -0,0 +1,77 @@
+/*
+ * dictzip-input-stream.h: dictzip GIO stream reader
+ *
+ * Copyright (c) 2013, Přemysl Janouch <p.janouch@gmail.com>
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#ifndef DICTZIP_INPUT_STREAM_H
+#define DICTZIP_INPUT_STREAM_H
+
+/** Random-access dictzip reader. */
+typedef struct dictzip_input_stream DictzipInputStream;
+typedef struct dictzip_input_stream_class DictzipInputStreamClass;
+typedef struct dictzip_input_stream_private DictzipInputStreamPrivate;
+
+/* GObject boilerplate. */
+#define DICTZIP_TYPE_INPUT_STREAM (dictzip_input_stream_get_type ())
+#define DICTZIP_INPUT_STREAM(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ DICTZIP_TYPE_INPUT_STREAM, DictzipInputStream))
+#define DICTZIP_IS_INPUT_STREAM(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ DICTZIP_TYPE_INPUT_STREAM))
+#define DICTZIP_INPUT_STREAM_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ DICTZIP_TYPE_INPUT_STREAM, DictzipInputStreamClass))
+#define DICTZIP_IS_INPUT_STREAM_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ DICTZIP_TYPE_INPUT_STREAM))
+#define DICTZIP_INPUT_STREAM_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ DICTZIP_TYPE_INPUT_STREAM, DictzipInputStreamClass))
+
+// --- Errors ------------------------------------------------------------------
+
+typedef enum {
+ DICTZIP_ERROR_NOT_SEEKABLE, //!< Underlying stream isn't seekable
+ DICTZIP_ERROR_INVALID_HEADER //!< Error occured while parsing header
+} DictzipError;
+
+#define DICTZIP_ERROR (dictzip_error_quark ())
+
+GQuark dictzip_error_quark (void);
+
+// --- DictzipInputStream ------------------------------------------------------
+
+struct dictzip_input_stream
+{
+ GFilterInputStream parent_instance;
+ DictzipInputStreamPrivate *priv;
+};
+
+struct dictzip_input_stream_class
+{
+ GFilterInputStreamClass parent_class;
+};
+
+GType dictzip_input_stream_get_type (void);
+DictzipInputStream *dictzip_input_stream_new
+ (GInputStream *base_stream, GError **error);
+GFileInfo *dictzip_input_stream_get_file_info (DictzipInputStream *self);
+
+
+#endif /* ! DICTZIP_INPUT_STREAM_H */