mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-23 18:52:09 +01:00
Add an inline version of g_strcmp0
This can be a significant optimization, since compilers know how to optimize strcmp, and inlining g_strcmp0 will make the strcmp call visible to the compiler at the call site.
This commit is contained in:
parent
2843eef4a4
commit
7994898475
@ -19,8 +19,27 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "gversionmacros.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_strcmp0:
|
||||||
|
* @str1: (nullable): a C string or %NULL
|
||||||
|
* @str2: (nullable): another C string or %NULL
|
||||||
|
*
|
||||||
|
* Compares @str1 and @str2 like strcmp(). Handles %NULL
|
||||||
|
* gracefully by sorting it before non-%NULL strings.
|
||||||
|
* Comparing two %NULL pointers returns 0.
|
||||||
|
*
|
||||||
|
* Returns: an integer less than, equal to, or greater than zero, if @str1 is <, == or > than @str2.
|
||||||
|
*
|
||||||
|
* Since: 2.16
|
||||||
|
*/
|
||||||
|
|
||||||
|
GLIB_AVAILABLE_IN_ALL
|
||||||
|
int g_strcmp0 (const char *str1, const char *str2);
|
||||||
|
|
||||||
#include "gtestutils.h"
|
#include "gtestutils.h"
|
||||||
|
|
||||||
#include "gfileutils.h"
|
#include "gfileutils.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -3397,30 +3416,6 @@ g_assertion_message_error (const char *domain,
|
|||||||
g_string_free (gstring, TRUE);
|
g_string_free (gstring, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* g_strcmp0:
|
|
||||||
* @str1: (nullable): a C string or %NULL
|
|
||||||
* @str2: (nullable): another C string or %NULL
|
|
||||||
*
|
|
||||||
* Compares @str1 and @str2 like strcmp(). Handles %NULL
|
|
||||||
* gracefully by sorting it before non-%NULL strings.
|
|
||||||
* Comparing two %NULL pointers returns 0.
|
|
||||||
*
|
|
||||||
* Returns: an integer less than, equal to, or greater than zero, if @str1 is <, == or > than @str2.
|
|
||||||
*
|
|
||||||
* Since: 2.16
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
g_strcmp0 (const char *str1,
|
|
||||||
const char *str2)
|
|
||||||
{
|
|
||||||
if (!str1)
|
|
||||||
return -(str1 != str2);
|
|
||||||
if (!str2)
|
|
||||||
return str1 != str2;
|
|
||||||
return strcmp (str1, str2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_trap_clear (void)
|
test_trap_clear (void)
|
||||||
{
|
{
|
||||||
|
@ -238,9 +238,20 @@ typedef void (*GTestFixtureFunc) (gpointer fixture,
|
|||||||
} G_STMT_END
|
} G_STMT_END
|
||||||
#endif /* !G_DISABLE_ASSERT */
|
#endif /* !G_DISABLE_ASSERT */
|
||||||
|
|
||||||
GLIB_AVAILABLE_IN_ALL
|
#ifndef GLIB_INLINE
|
||||||
int g_strcmp0 (const char *str1,
|
#define GLIB_INLINE
|
||||||
const char *str2);
|
#endif
|
||||||
|
|
||||||
|
GLIB_INLINE int
|
||||||
|
g_strcmp0 (const char *str1,
|
||||||
|
const char *str2)
|
||||||
|
{
|
||||||
|
if (!str1)
|
||||||
|
return -(str1 != str2);
|
||||||
|
if (!str2)
|
||||||
|
return str1 != str2;
|
||||||
|
return strcmp (str1, str2);
|
||||||
|
}
|
||||||
|
|
||||||
/* report performance results */
|
/* report performance results */
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
|
Loading…
x
Reference in New Issue
Block a user