LCOV - code coverage report
Current view: directory - gfx/harfbuzz/src - hb-mutex-private.hh (source / functions) Found Hit Coverage
Test: app.info Lines: 7 7 100.0 %
Date: 2012-06-02 Functions: 7 7 100.0 %

       1                 : /*
       2                 :  * Copyright © 2007  Chris Wilson
       3                 :  * Copyright © 2009,2010  Red Hat, Inc.
       4                 :  * Copyright © 2011  Google, Inc.
       5                 :  *
       6                 :  *  This is part of HarfBuzz, a text shaping library.
       7                 :  *
       8                 :  * Permission is hereby granted, without written agreement and without
       9                 :  * license or royalty fees, to use, copy, modify, and distribute this
      10                 :  * software and its documentation for any purpose, provided that the
      11                 :  * above copyright notice and the following two paragraphs appear in
      12                 :  * all copies of this software.
      13                 :  *
      14                 :  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
      15                 :  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
      16                 :  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
      17                 :  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
      18                 :  * DAMAGE.
      19                 :  *
      20                 :  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
      21                 :  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
      22                 :  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
      23                 :  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
      24                 :  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
      25                 :  *
      26                 :  * Contributor(s):
      27                 :  *      Chris Wilson <chris@chris-wilson.co.uk>
      28                 :  * Red Hat Author(s): Behdad Esfahbod
      29                 :  * Google Author(s): Behdad Esfahbod
      30                 :  */
      31                 : 
      32                 : #ifndef HB_MUTEX_PRIVATE_HH
      33                 : #define HB_MUTEX_PRIVATE_HH
      34                 : 
      35                 : #include "hb-private.hh"
      36                 : 
      37                 : 
      38                 : 
      39                 : /* mutex */
      40                 : 
      41                 : /* We need external help for these */
      42                 : 
      43                 : #ifdef HAVE_GLIB
      44                 : 
      45                 : #include <glib.h>
      46                 : 
      47                 : typedef GStaticMutex hb_mutex_impl_t;
      48                 : #define HB_MUTEX_IMPL_INIT      G_STATIC_MUTEX_INIT
      49                 : #define hb_mutex_impl_init(M)   g_static_mutex_init (M)
      50                 : #define hb_mutex_impl_lock(M)   g_static_mutex_lock (M)
      51                 : #define hb_mutex_impl_unlock(M) g_static_mutex_unlock (M)
      52                 : #define hb_mutex_impl_free(M)   g_static_mutex_free (M)
      53                 : 
      54                 : 
      55                 : #elif defined(_MSC_VER) || defined(__MINGW32__)
      56                 : 
      57                 : #include <windows.h>
      58                 : 
      59                 : typedef CRITICAL_SECTION hb_mutex_impl_t;
      60                 : #define HB_MUTEX_IMPL_INIT      { NULL, 0, 0, NULL, NULL, 0 }
      61                 : #define hb_mutex_impl_init(M)   InitializeCriticalSection (M)
      62                 : #define hb_mutex_impl_lock(M)   EnterCriticalSection (M)
      63                 : #define hb_mutex_impl_unlock(M) LeaveCriticalSection (M)
      64                 : #define hb_mutex_impl_free(M)   DeleteCriticalSection (M)
      65                 : 
      66                 : 
      67                 : #else
      68                 : 
      69                 : #warning "Could not find any system to define platform macros, library will NOT be thread-safe"
      70                 : 
      71                 : typedef volatile int hb_mutex_impl_t;
      72                 : #define HB_MUTEX_IMPL_INIT      0
      73                 : #define hb_mutex_impl_init(M)   ((void) (*(M) = 0))
      74                 : #define hb_mutex_impl_lock(M)   ((void) (*(M) = 1))
      75                 : #define hb_mutex_impl_unlock(M) ((void) (*(M) = 0))
      76                 : #define hb_mutex_impl_free(M)   ((void) (*(M) = 2))
      77                 : 
      78                 : 
      79                 : #endif
      80                 : 
      81                 : 
      82                 : struct hb_mutex_t
      83            2928 : {
      84                 :   hb_mutex_impl_t m;
      85                 : 
      86            2928 :   inline void init   (void) { hb_mutex_impl_init   (&m); }
      87            1487 :   inline void lock   (void) { hb_mutex_impl_lock   (&m); }
      88            1487 :   inline void unlock (void) { hb_mutex_impl_unlock (&m); }
      89            2974 :   inline void free   (void) { hb_mutex_impl_free   (&m); }
      90                 : };
      91                 : 
      92                 : #define HB_MUTEX_INIT           {HB_MUTEX_IMPL_INIT}
      93                 : #define hb_mutex_init(M)        (M)->init ()
      94                 : #define hb_mutex_lock(M)        (M)->lock ()
      95                 : #define hb_mutex_unlock(M)      (M)->unlock ()
      96                 : #define hb_mutex_free(M)        (M)->free ()
      97                 : 
      98                 : 
      99                 : struct hb_static_mutex_t : hb_mutex_t
     100                 : {
     101            2928 :   hb_static_mutex_t (void)  { this->init (); }
     102            2974 :   ~hb_static_mutex_t (void) { this->free (); }
     103                 : 
     104                 :   private:
     105                 :   NO_COPY (hb_static_mutex_t);
     106                 : };
     107                 : 
     108                 : 
     109                 : 
     110                 : #endif /* HB_MUTEX_PRIVATE_HH */

Generated by: LCOV version 1.7