Skip to content

Commit

Permalink
[glibutil] Added GUtilIdleQueue
Browse files Browse the repository at this point in the history
Allows to queue idle callbacks, tag them, cancel individual
callbacks or all of them.
  • Loading branch information
monich committed Apr 23, 2017
1 parent 3eaeb37 commit c6ac661
Show file tree
Hide file tree
Showing 11 changed files with 736 additions and 1 deletion.
1 change: 1 addition & 0 deletions Makefile
Expand Up @@ -44,6 +44,7 @@ LIB = $(LIB_SONAME).$(VERSION_MINOR).$(VERSION_RELEASE)
SRC = \
gutil_history.c \
gutil_idlepool.c \
gutil_idlequeue.c \
gutil_inotify.c \
gutil_intarray.c \
gutil_ints.c \
Expand Down
119 changes: 119 additions & 0 deletions include/gutil_idlequeue.h
@@ -0,0 +1,119 @@
/*
* Copyright (C) 2017 Jolla Ltd.
* Contact: Slava Monich <slava.monich@jolla.com>
*
* You may use this file under the terms of BSD license as follows:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Jolla Ltd nor the names of its contributors may
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef GUTIL_IDLEQUEUE_H
#define GUTIL_IDLEQUEUE_H

#include "gutil_types.h"

G_BEGIN_DECLS

/*
* GUtilIdleQueue allows to queue idle callbacks, tag them, cancel
* individual callbacks or all of them.
*/

typedef gsize GUtilIdleQueueTag;

typedef
void
(*GUtilIdleFunc)(
gpointer data);

GUtilIdleQueue*
gutil_idle_queue_new(void);

void
gutil_idle_queue_free(
GUtilIdleQueue* queue);

GUtilIdleQueue*
gutil_idle_queue_ref(
GUtilIdleQueue* queue);

void
gutil_idle_queue_unref(
GUtilIdleQueue* queue);

void
gutil_idle_queue_add(
GUtilIdleQueue* queue,
GUtilIdleFunc run,
gpointer data);

void
gutil_idle_queue_add_full(
GUtilIdleQueue* queue,
GUtilIdleFunc run,
gpointer data,
GFreeFunc free);

void
gutil_idle_queue_add_tag(
GUtilIdleQueue* queue,
GUtilIdleQueueTag tag,
GUtilIdleFunc run,
gpointer data);

void
gutil_idle_queue_add_tag_full(
GUtilIdleQueue* queue,
GUtilIdleQueueTag tag,
GUtilIdleFunc run,
gpointer data,
GFreeFunc free);

gboolean
gutil_idle_queue_contains_tag(
GUtilIdleQueue* queue,
GUtilIdleQueueTag tag);

gboolean
gutil_idle_queue_cancel_tag(
GUtilIdleQueue* queue,
GUtilIdleQueueTag tag);

void
gutil_idle_queue_cancel_all(
GUtilIdleQueue* queue);

G_END_DECLS

#endif /* GUTIL_IDLEQUEUE_H */

/*
* Local Variables:
* mode: C
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
*/
1 change: 1 addition & 0 deletions include/gutil_types.h
Expand Up @@ -42,6 +42,7 @@ G_BEGIN_DECLS

typedef char* GStrV;
typedef struct gutil_idle_pool GUtilIdlePool;
typedef struct gutil_idle_queue GUtilIdleQueue;
typedef struct gutil_ints GUtilInts;
typedef struct gutil_int_array GUtilIntArray;
typedef struct gutil_int_history GUtilIntHistory;
Expand Down
8 changes: 8 additions & 0 deletions libglibutil.dsp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c6ac661

Please sign in to comment.