From 847259e346a03c7d043fe3774272056e8dc45f3d Mon Sep 17 00:00:00 2001 From: Roger Hughston Date: Thu, 16 Mar 2006 21:28:44 +0000 Subject: [PATCH] Name Colision on OSX notify.h = pnotify.h --- dtool/src/prc/pnotify.I | 18 ++++ dtool/src/prc/pnotify.h | 199 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 dtool/src/prc/pnotify.I create mode 100644 dtool/src/prc/pnotify.h diff --git a/dtool/src/prc/pnotify.I b/dtool/src/prc/pnotify.I new file mode 100644 index 0000000000..ebb24ef898 --- /dev/null +++ b/dtool/src/prc/pnotify.I @@ -0,0 +1,18 @@ +// Filename: notify.I +// Created by: drose (28Feb00) +// +//////////////////////////////////////////////////////////////////// +// +// PANDA 3D SOFTWARE +// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved +// +// All use of this software is subject to the terms of the Panda 3d +// Software license. You should have received a copy of this license +// along with this source code; you will also find a current copy of +// the license at http://etc.cmu.edu/panda3d/docs/license/ . +// +// To contact the maintainers of this program write to +// panda3d-general@lists.sourceforge.net . +// +//////////////////////////////////////////////////////////////////// + diff --git a/dtool/src/prc/pnotify.h b/dtool/src/prc/pnotify.h new file mode 100644 index 0000000000..ee1abdb80d --- /dev/null +++ b/dtool/src/prc/pnotify.h @@ -0,0 +1,199 @@ +// Filename: pnotify.h +// Created by: drose (28Feb00) +// +//////////////////////////////////////////////////////////////////// +// +// PANDA 3D SOFTWARE +// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved +// +// All use of this software is subject to the terms of the Panda 3d +// Software license. You should have received a copy of this license +// along with this source code; you will also find a current copy of +// the license at http://etc.cmu.edu/panda3d/docs/license/ . +// +// To contact the maintainers of this program write to +// panda3d-general@lists.sourceforge.net . +// +//////////////////////////////////////////////////////////////////// + +#ifndef NOTIFY_H +#define NOTIFY_H + +#include "dtoolbase.h" + +#include "notifySeverity.h" +#include "pmap.h" + +class NotifyCategory; + +//////////////////////////////////////////////////////////////////// +// Class : Notify +// Description : An object that handles general error reporting to the +// user. It contains a pointer to an ostream, initially +// cerr, which can be reset at will to point to +// different output devices, according to the needs of +// the application. All output generated within Panda +// should vector through the Notify ostream. +// +// This also includes a collection of Categories and +// Severities, which may be independently enabled or +// disabled, so that error messages may be squelched or +// respected according to the wishes of the user. +//////////////////////////////////////////////////////////////////// +class EXPCL_DTOOLCONFIG Notify { +PUBLISHED: + Notify(); + ~Notify(); + + void set_ostream_ptr(ostream *ostream_ptr, bool delete_later); + ostream *get_ostream_ptr() const; + + typedef bool AssertHandler(const char *expression, int line, + const char *source_file); + + void set_assert_handler(AssertHandler *assert_handler); + void clear_assert_handler(); + bool has_assert_handler() const; + AssertHandler *get_assert_handler() const; + + bool has_assert_failed() const; + const string &get_assert_error_message() const; + void clear_assert_failed(); + + NotifyCategory *get_top_category(); + NotifyCategory *get_category(const string &basename, + NotifyCategory *parent_category); + NotifyCategory *get_category(const string &basename, + const string &parent_fullname); + NotifyCategory *get_category(const string &fullname); + + static ostream &out(); + static ostream &null(); + static void write_string(const string &str); + static Notify *ptr(); + +public: + static ios_fmtflags get_literal_flag(); + + bool assert_failure(const string &expression, int line, + const char *source_file); + bool assert_failure(const char *expression, int line, + const char *source_file); + + static NotifySeverity string_severity(const string &string); + + void config_initialized(); + +private: + ostream *_ostream_ptr; + bool _owns_ostream_ptr; + ostream *_null_ostream_ptr; + + AssertHandler *_assert_handler; + bool _assert_failed; + string _assert_error_message; + + typedef pmap Categories; + Categories _categories; + + static Notify *_global_ptr; +}; + + +// This defines the symbol nout in the same way that cerr and cout are +// defined, for compactness of C++ code that uses Notify in its +// simplest form. Maybe it's a good idea to define this symbol and +// maybe it's not, but it does seem that "nout" isn't likely to +// collide with any other name. + +#define nout (Notify::out()) + +// Here are a couple of assert-type functions. These are designed to +// avoid simply dumping core, since that's quite troublesome when the +// programmer is working in a higher-level environment that is calling +// into the C++ layer. + +// nassertr() is intended to be used in functions that have return +// values; it returns the indicated value if the assertion fails. + +// nassertv() is intended to be used in functions that do not have +// return values; it simply returns if the assertion fails. + +// nassertd() does not return from the function, but instead executes +// the following block of code (like an if statement) if the assertion +// fails. + +// nassertr_always() and nassertv_always() are like nassertr() and +// nassertv(), except that they will not get completely compiled out +// if NDEBUG is set. Instead, they will quietly return from the +// function. These macros are appropriate, for instance, for sanity +// checking user input parameters, where optimal performance is not +// paramount. + +#ifdef NDEBUG + +#define nassertr(condition, return_value) +#define nassertv(condition) +#define nassertd(condition) if (false) +// We trust the compiler to optimize the above out. + +#define nassertr_always(condition, return_value) \ + { \ + if (!(condition)) { \ + return return_value; \ + } \ + } + +#define nassertv_always(condition) \ + { \ + if (!(condition)) { \ + return; \ + } \ + } + +#define nassert_raise(message) Notify::write_string(message) + +#define enter_debugger_if(condition) ((void)0) + +#else // NDEBUG + +#define nassertr(condition, return_value) \ + { \ + if (!(condition)) { \ + if (Notify::ptr()->assert_failure(#condition, __LINE__, __FILE__)) { \ + return return_value; \ + } \ + } \ + } + +#define nassertv(condition) \ + { \ + if (!(condition)) { \ + if (Notify::ptr()->assert_failure(#condition, __LINE__, __FILE__)) { \ + return; \ + } \ + } \ + } + +#define nassertd(condition) \ + if (!(condition) && \ + Notify::ptr()->assert_failure(#condition, __LINE__, __FILE__)) + +#define nassertr_always(condition, return_value) nassertr(condition, return_value) +#define nassertv_always(condition) nassertv(condition) + +#define nassert_raise(message) Notify::ptr()->assert_failure(message, __LINE__, __FILE__) + +#define enter_debugger_if(condition) \ + if (condition) { \ + Notify::ptr()->assert_failure(#condition, __LINE__, __FILE__); \ + __asm { int 3 } \ + } + + +#endif // NDEBUG + + +#include "pnotify.I" + +#endif