diff options
Diffstat (limited to 'src/input_stream.h')
-rw-r--r-- | src/input_stream.h | 131 |
1 files changed, 50 insertions, 81 deletions
diff --git a/src/input_stream.h b/src/input_stream.h index 10ad97161..b5b251f59 100644 --- a/src/input_stream.h +++ b/src/input_stream.h @@ -29,64 +29,14 @@ #include <stdbool.h> #include <sys/types.h> -struct input_stream { - /** - * the plugin which implements this input stream - */ - const struct input_plugin *plugin; +struct Tag; +struct input_stream; - /** - * The absolute URI which was used to open this stream. May - * be NULL if this is unknown. - */ - char *uri; +#ifdef __cplusplus +extern "C" { - /** - * A mutex that protects the mutable attributes of this object - * and its implementation. It must be locked before calling - * any of the public methods. - * - * This object is allocated by the client, and the client is - * responsible for freeing it. - */ - GMutex *mutex; - - /** - * A cond that gets signalled when the state of this object - * changes from the I/O thread. The client of this object may - * wait on it. Optional, may be NULL. - * - * This object is allocated by the client, and the client is - * responsible for freeing it. - */ - GCond *cond; - - /** - * indicates whether the stream is ready for reading and - * whether the other attributes in this struct are valid - */ - bool ready; - - /** - * if true, then the stream is fully seekable - */ - bool seekable; - - /** - * the size of the resource, or -1 if unknown - */ - goffset size; - - /** - * the current offset within the stream - */ - goffset offset; - - /** - * the MIME content type of the resource, or NULL if unknown - */ - char *mime; -}; +#include "thread/Mutex.hxx" +#include "thread/Cond.hxx" /** * Opens a new input stream. You may not access it until the "ready" @@ -99,13 +49,15 @@ struct input_stream { * notifications * @return an #input_stream object on success, NULL on error */ -gcc_nonnull(1, 2) -G_GNUC_MALLOC +gcc_nonnull(1) +gcc_malloc struct input_stream * input_stream_open(const char *uri, - GMutex *mutex, GCond *cond, + Mutex &mutex, Cond &cond, GError **error_r); +#endif + /** * Close the input stream and free resources. * @@ -115,20 +67,6 @@ gcc_nonnull(1) void input_stream_close(struct input_stream *is); -gcc_nonnull(1) -static inline void -input_stream_lock(struct input_stream *is) -{ - g_mutex_lock(is->mutex); -} - -gcc_nonnull(1) -static inline void -input_stream_unlock(struct input_stream *is) -{ - g_mutex_unlock(is->mutex); -} - /** * Check for errors that may have occurred in the I/O thread. * @@ -163,6 +101,33 @@ gcc_nonnull(1) void input_stream_lock_wait_ready(struct input_stream *is); +gcc_nonnull_all gcc_pure +const char * +input_stream_get_mime_type(const struct input_stream *is); + +gcc_nonnull_all +void +input_stream_override_mime_type(struct input_stream *is, const char *mime); + +gcc_nonnull_all gcc_pure +goffset +input_stream_get_size(const struct input_stream *is); + +gcc_nonnull_all gcc_pure +goffset +input_stream_get_offset(const struct input_stream *is); + +gcc_nonnull_all gcc_pure +bool +input_stream_is_seekable(const struct input_stream *is); + +/** + * Determines whether seeking is cheap. This is true for local files. + */ +gcc_pure gcc_nonnull(1) +bool +input_stream_cheap_seeking(const struct input_stream *is); + /** * Seeks to the specified position in the stream. This will most * likely fail if the "seekable" flag is false. @@ -193,7 +158,7 @@ input_stream_lock_seek(struct input_stream *is, goffset offset, int whence, * The caller must lock the mutex. */ gcc_nonnull(1) -G_GNUC_PURE +gcc_pure bool input_stream_eof(struct input_stream *is); /** @@ -201,7 +166,7 @@ bool input_stream_eof(struct input_stream *is); * the caller must not be holding it already. */ gcc_nonnull(1) -G_GNUC_PURE +gcc_pure bool input_stream_lock_eof(struct input_stream *is); @@ -210,12 +175,12 @@ input_stream_lock_eof(struct input_stream *is); * * The caller must lock the mutex. * - * @return a tag object which must be freed with tag_free(), or NULL + * @return a tag object which must be freed by the caller, or nullptr * if the tag has not changed since the last call */ gcc_nonnull(1) -G_GNUC_MALLOC -struct tag * +gcc_malloc +Tag * input_stream_tag(struct input_stream *is); /** @@ -223,8 +188,8 @@ input_stream_tag(struct input_stream *is); * mutex; the caller must not be holding it already. */ gcc_nonnull(1) -G_GNUC_MALLOC -struct tag * +gcc_malloc +Tag * input_stream_lock_tag(struct input_stream *is); /** @@ -235,7 +200,7 @@ input_stream_lock_tag(struct input_stream *is); * The caller must lock the mutex. */ gcc_nonnull(1) -G_GNUC_PURE +gcc_pure bool input_stream_available(struct input_stream *is); @@ -264,4 +229,8 @@ size_t input_stream_lock_read(struct input_stream *is, void *ptr, size_t size, GError **error_r); +#ifdef __cplusplus +} +#endif + #endif |