diff options
author | Murray Cumming <murrayc@murrayc.com> | 2011-10-26 12:24:38 +0200 |
---|---|---|
committer | Murray Cumming <murrayc@murrayc.com> | 2011-10-26 12:24:38 +0200 |
commit | c97f8e8681e550ebe09af9ac5a366273b6d98673 (patch) | |
tree | 4fafc04ac42aa7bea8d3fbbc38ed6dee9aec300d | |
parent | 159805cd380a2f1e2e1e51b880bf1104f0259333 (diff) | |
download | glibmm-c97f8e8681e550ebe09af9ac5a366273b6d98673.tar.gz |
Move IOCondition from main.h to iochannel.h and autogenerate it.
* glib/src/iochannel.hg: Use _WRAP_ENUM() for IOCondition instead of
hand-coding it in
* glib/glibmm/main.h:
though this requires some manual editing of
* glib/src/glib_enums.defs: due to the weird defines that GioChannel uses for
its values. See the comment.
* glib/glibmm/streamiochannel.cc: Adjust the includes.
This avoids the need to include glib.h from main.h.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | glib/glibmm/main.h | 54 | ||||
-rw-r--r-- | glib/glibmm/streamiochannel.cc | 1 | ||||
-rw-r--r-- | glib/src/glib_enums.defs | 20 | ||||
-rw-r--r-- | glib/src/iochannel.hg | 17 |
5 files changed, 44 insertions, 61 deletions
@@ -1,5 +1,18 @@ 2011-10-26 Murray Cumming <murrayc@murrayc.com> + Move IOCondition from main.h to iochannel.h and autogenerate it. + + * glib/src/iochannel.hg: Use _WRAP_ENUM() for IOCondition instead of + hand-coding it in + * glib/glibmm/main.h: + though this requires some manual editing of + * glib/src/glib_enums.defs: due to the weird defines that GioChannel uses for + its values. See the comment. + * glib/glibmm/streamiochannel.cc: Adjust the includes. + This avoids the need to include glib.h from main.h. + +2011-10-26 Murray Cumming <murrayc@murrayc.com> + Avoid some deprecation compiler warnings. * gio/src/file.hg: diff --git a/glib/glibmm/main.h b/glib/glibmm/main.h index 19053441..6d1cbda9 100644 --- a/glib/glibmm/main.h +++ b/glib/glibmm/main.h @@ -23,8 +23,8 @@ #include <glibmm/refptr.h> #include <glibmm/timeval.h> #include <glibmm/priorities.h> +#include <glibmm/iochannel.h> #include <sigc++/sigc++.h> -#include <glib.h> #include <vector> namespace Glib @@ -32,64 +32,12 @@ namespace Glib class Cond; class Mutex; -class IOChannel; /** @defgroup MainLoop The Main Event Loop * Manages all available sources of events. * @{ */ -/** A bitwise combination representing an I/O condition to watch for on an - * event source. - * The flags correspond to those used by the <tt>%poll()</tt> system call - * on UNIX (see <tt>man 2 poll</tt>). To test for individual flags, do - * something like this: - * @code - * if((condition & Glib::IO_OUT) != 0) - * do_some_output(); - * @endcode - * @par Bitwise operators: - * <tt>IOCondition operator|(IOCondition, IOCondition)</tt><br> - * <tt>IOCondition operator&(IOCondition, IOCondition)</tt><br> - * <tt>IOCondition operator^(IOCondition, IOCondition)</tt><br> - * <tt>IOCondition operator~(IOCondition)</tt><br> - * <tt>IOCondition& operator|=(IOCondition&, IOCondition)</tt><br> - * <tt>IOCondition& operator&=(IOCondition&, IOCondition)</tt><br> - * <tt>IOCondition& operator^=(IOCondition&, IOCondition)</tt><br> - */ -enum IOCondition -{ - IO_IN = G_IO_IN, /*!< @hideinitializer There is data to read. */ - IO_OUT = G_IO_OUT, /*!< @hideinitializer Data can be written (without blocking). */ - IO_PRI = G_IO_PRI, /*!< @hideinitializer There is urgent data to read. */ - IO_ERR = G_IO_ERR, /*!< @hideinitializer %Error condition. */ - IO_HUP = G_IO_HUP, /*!< @hideinitializer Hung up (the connection has been broken, - usually for pipes and sockets). */ - IO_NVAL = G_IO_NVAL /*!< @hideinitializer Invalid request. The file descriptor is not open. */ -}; - -inline IOCondition operator|(IOCondition lhs, IOCondition rhs) - { return static_cast<IOCondition>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); } - -inline IOCondition operator&(IOCondition lhs, IOCondition rhs) - { return static_cast<IOCondition>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); } - -inline IOCondition operator^(IOCondition lhs, IOCondition rhs) - { return static_cast<IOCondition>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); } - -inline IOCondition operator~(IOCondition flags) - { return static_cast<IOCondition>(~static_cast<unsigned>(flags)); } - -inline IOCondition& operator|=(IOCondition& lhs, IOCondition rhs) - { return (lhs = static_cast<IOCondition>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); } - -inline IOCondition& operator&=(IOCondition& lhs, IOCondition rhs) - { return (lhs = static_cast<IOCondition>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); } - -inline IOCondition& operator^=(IOCondition& lhs, IOCondition rhs) - { return (lhs = static_cast<IOCondition>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); } - - class PollFD { public: diff --git a/glib/glibmm/streamiochannel.cc b/glib/glibmm/streamiochannel.cc index 08b661bd..e5201db7 100644 --- a/glib/glibmm/streamiochannel.cc +++ b/glib/glibmm/streamiochannel.cc @@ -18,6 +18,7 @@ */ #include <glibmm/streamiochannel.h> +#include <glibmm/main.h> //For Source #include <glib.h> #include <fstream> #include <iostream> diff --git a/glib/src/glib_enums.defs b/glib/src/glib_enums.defs index bfec0b5e..09c252b3 100644 --- a/glib/src/glib_enums.defs +++ b/glib/src/glib_enums.defs @@ -368,16 +368,24 @@ ;; G_IO_NVAL GLIB_SYSDEF_POLLNVAL ;; } GIOCondition; +;; We hand-edit these to use the actual enum values, +;; because the values are actually defines that contain a =, +;; which is very bizarre. +;; We would need to include the header anyway, +;; because we can't just use numeric values. +;; If you regenerate this .defs file and forget to make this change +;; then you will see compiler errors like this: +;; ../glibmm/iochannel.h:154:12: error: expected primary-expression before '=' token (define-flags-extended IOCondition (in-module "G") (c-name "GIOCondition") (values - '("in" "G_IO_IN" "GLIB_SYSDEF_POLLIN") - '("out" "G_IO_OUT" "GLIB_SYSDEF_POLLOUT") - '("pri" "G_IO_PRI" "GLIB_SYSDEF_POLLPRI") - '("err" "G_IO_ERR" "GLIB_SYSDEF_POLLERR") - '("hup" "G_IO_HUP" "GLIB_SYSDEF_POLLHUP") - '("nval" "G_IO_NVAL" "GLIB_SYSDEF_POLLNVAL") + '("in" "G_IO_IN" "G_IO_IN") + '("out" "G_IO_OUT" "G_IO_OUT") + '("pri" "G_IO_PRI" "G_IO_PRI") + '("err" "G_IO_ERR" "G_IO_ERR") + '("hup" "G_IO_HUP" "G_IO_HUP") + '("nval" "G_IO_NVAL" "G_IO_NVAL") ) ) diff --git a/glib/src/iochannel.hg b/glib/src/iochannel.hg index f4853c3c..a59d3c51 100644 --- a/glib/src/iochannel.hg +++ b/glib/src/iochannel.hg @@ -21,11 +21,11 @@ _DEFS(glibmm,glib) #include <glibmmconfig.h> +#include <glib.h> //For the GIOChannel enum values. #include <glibmm/error.h> -#include <glibmm/main.h> #include <glibmm/refptr.h> #include <glibmm/ustring.h> -#include <glib.h> +#include <sigc++/sigc++.h> #include <string> #ifndef DOXYGEN_SHOULD_SKIP_THIS @@ -42,6 +42,19 @@ _WRAP_ENUM(SeekType, GSeekType, NO_GTYPE, s#^SEEK_#SEEK_TYPE_#) _WRAP_ENUM(IOStatus, GIOStatus, NO_GTYPE) _WRAP_ENUM(IOFlags, GIOFlags, NO_GTYPE) + +/** A bitwise combination representing an I/O condition to watch for on an + * event source. + * The flags correspond to those used by the <tt>%poll()</tt> system call + * on UNIX (see <tt>man 2 poll</tt>). To test for individual flags, do + * something like this: + * @code + * if((condition & Glib::IO_OUT) != 0) + * do_some_output(); + * @endcode + */ +_WRAP_ENUM(IOCondition, GIOCondition, NO_GTYPE) + /** Exception class for IOChannel errors. */ _WRAP_GERROR(IOChannelError, GIOChannelError, G_IO_CHANNEL_ERROR, NO_GTYPE, |