summaryrefslogtreecommitdiff
path: root/src/stardict.c
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/stardict.c
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/stardict.c')
-rw-r--r--src/stardict.c56
1 files changed, 1 insertions, 55 deletions
diff --git a/src/stardict.c b/src/stardict.c
index 4e3f5bd..9a25b3e 100644
--- a/src/stardict.c
+++ b/src/stardict.c
@@ -29,48 +29,11 @@
#include "stardict.h"
#include "stardict-private.h"
+#include "utils.h"
// --- Utilities ---------------------------------------------------------------
-/** Read the whole stream into a byte array. */
-static gboolean
-stream_read_all (GByteArray *ba, GInputStream *is, GError **error)
-{
- guint8 buffer[1024 * 64];
- gsize bytes_read;
-
- while (g_input_stream_read_all (is, buffer, sizeof buffer,
- &bytes_read, NULL, error))
- {
- g_byte_array_append (ba, buffer, bytes_read);
- if (bytes_read < sizeof buffer)
- return TRUE;
- }
- return FALSE;
-}
-
-/** Read a null-terminated string from a data input stream. */
-static gchar *
-stream_read_string (GDataInputStream *dis, GError **error)
-{
- gsize length;
- gchar *s = g_data_input_stream_read_upto (dis, "", 1, &length, NULL, error);
- if (!s)
- return NULL;
-
- GError *err = NULL;
- g_data_input_stream_read_byte (dis, NULL, &err);
- if (err)
- {
- g_free (s);
- g_propagate_error (error, err);
- return NULL;
- }
-
- return s;
-}
-
/** String compare function used for StarDict indexes. */
static inline gint
stardict_strcmp (const gchar *s1, const gchar *s2)
@@ -79,23 +42,6 @@ stardict_strcmp (const gchar *s1, const gchar *s2)
return a ? a : strcmp (s1, s2);
}
-/** After this statement, the element has been found and its index is stored
- * in the variable "imid". */
-#define BINARY_SEARCH_BEGIN(max, compare) \
- gint imin = 0, imax = max, imid; \
- while (imin <= imax) { \
- imid = imin + (imax - imin) / 2; \
- gint cmp = compare; \
- if (cmp > 0) imin = imid + 1; \
- else if (cmp < 0) imax = imid - 1; \
- else {
-
-/** After this statement, the binary search has failed and "imin" stores
- * the position where the element can be inserted. */
-#define BINARY_SEARCH_END \
- } \
- }
-
// --- Errors ------------------------------------------------------------------
GQuark