diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2013-07-14 20:40:58 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2013-07-18 00:16:43 +0200 |
commit | 15f62b7054c12bff2899ac6bd73147b6bfc818fe (patch) | |
tree | 9316baf417aa91c5973f30c86897570defbc571f /src/stardict.c | |
parent | c2e870937298a8a58b5a94ab24e419c3230a6ba6 (diff) | |
download | tdv-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.c | 56 |
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 |