gst_plugins_base/gst-libs/gst/floatcast/floatcast.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:16:41 +0100
branchRCL_3
changeset 30 7e817e7e631c
parent 29 567bb019e3e3
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201010 Kit: 201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/* GStreamer
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
 * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
 * Library       <2002> Steve Baker <stevebaker_org@yahoo.co.uk>
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
 * This library is free software; you can redistribute it and/or
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
 * modify it under the terms of the GNU Library General Public
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
 * License as published by the Free Software Foundation; either
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
 * version 2 of the License, or (at your option) any later version.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
 * This library is distributed in the hope that it will be useful,
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
 * Library General Public License for more details.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
 * You should have received a copy of the GNU Library General Public
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
 * License along with this library; if not, write to the
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
 * Boston, MA 02111-1307, USA.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
 */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
/**
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
 * SECTION:gstfloatcast
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
 * @short_description: Floating point platform independence macros
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
 * The floatcast.h header file contains a couple of convenience macros for
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
 * floating point numbers.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
 * If you include this header, your application or library must link against
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
 * libm (for maths.h support).
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
 * For optimal results, your application&apos;s or library&apos;s build
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
 * system should check whether the C99 functions lrint and lrintf are supported
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
 * and define the preprocessor symbols HAVE_LRINT and HAVE_LRINTF if so.  If
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
 * you are using autoconf, you can do this by using the AC_C99_FUNC_LRINT and
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
 * AC_C99_FUNC_LRINTF checks in your configure.ac or configure.in file and
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
 * including your application's config.h header before you include floatcast.h.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
 */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
#ifndef __FLOATCAST_H__
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
#define __FLOATCAST_H__
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
#include <string.h>
30
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
    43
#include <glib/gtypes.h>
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
    44
#include <glib/gutils.h>  /* to make sure inline is defined properly */
0
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
#if defined (_MSC_VER) && !defined (inline)
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
#define inline __inline
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
#endif
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
G_BEGIN_DECLS
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
/* FIXME 0.11: these gst_cast_*() functions are not used anywhere, so we could
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
 * just as well get rid of them and move the float/double swap macros into
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
 * gstutils.h in core */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
/**
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
 * gst_cast_float:
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
 * @x: input value
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
 * Casts a 32-bit floating point value (float) to an integer without bias.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
 */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
/**
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
 * gst_cast_double:
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
 * @x: input value
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    65
 *
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    66
 * Casts a 64-bit floating point value (double) to an integer without bias.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
 */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    68
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    69
/* FIXME: HAVE_LRINT && HAVE_LRINTF are defined by config.h - they should
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    70
 * not be used in an installed header. */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
#if defined(HAVE_LRINT) && defined(HAVE_LRINTF)
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    73
        /*      These defines enable functionality introduced with the 1999 ISO C
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    74
        **      standard. They must be defined before the inclusion of math.h to
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    75
        **      engage them. If optimisation is enabled, these functions will be 
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
        **      inlined. With optimisation switched off, you have to link in the
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
        **      maths library using -lm.
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    78
        */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    79
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    80
        #define _ISOC9X_SOURCE  1
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    81
        #define _ISOC99_SOURCE  1
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    82
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    83
        #define __USE_ISOC9X    1
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    84
        #define __USE_ISOC99    1
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    85
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    86
        #include        <math.h>
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    87
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    88
        #define gst_cast_float(x)       ((gint)lrintf(x))
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    89
        #define gst_cast_double(x)      ((gint)lrint(x))
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    90
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
#else
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    92
        #include <math.h>
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
        /* use a standard c cast, but do rounding correctly */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
        #define gst_cast_float(x)       ((gint)floor((x)+0.5))
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
        #define gst_cast_double(x)      ((gint)floor((x)+0.5))
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    97
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
#endif
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
30
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   100
/* FIXME 0.11: don't use GLib namespace (GDOUBLE_SWAP_LE_BE, GFLOAT_TO_LE,
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   101
 * GFLOAT_TO_BE, GDOUBLE_TO_LE, GDOUBLE_TO_BE) */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   102
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   103
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   104
 * GFLOAT_SWAP_LE_BE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   105
 * @in: input value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   106
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   107
 * Swap byte order of a 32-bit floating point value (float).
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   108
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   109
inline static gfloat
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   110
GFLOAT_SWAP_LE_BE(gfloat in)
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   111
{
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   112
  union
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   113
  {
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   114
    guint32 i;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   115
    gfloat f;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   116
  } u;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   117
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   118
  u.f = in;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   119
  u.i = GUINT32_SWAP_LE_BE (u.i);
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   120
  return u.f;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   121
}
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   122
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   123
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   124
 * GDOUBLE_SWAP_LE_BE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   125
 * @in: input value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   126
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   127
 * Swap byte order of a 64-bit floating point value (double).
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   128
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   129
inline static gdouble
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   130
GDOUBLE_SWAP_LE_BE(gdouble in)
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   131
{
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   132
  union
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   133
  {
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   134
    guint64 i;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   135
    gdouble d;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   136
  } u;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   137
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   138
  u.d = in;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   139
  u.i = GUINT64_SWAP_LE_BE (u.i);
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   140
  return u.d;
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   141
}
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   142
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   143
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   144
 * GDOUBLE_TO_LE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   145
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   146
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   147
 * Convert 64-bit floating point value (double) from native byte order into
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   148
 * little endian byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   149
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   150
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   151
 * GDOUBLE_TO_BE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   152
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   153
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   154
 * Convert 64-bit floating point value (double) from native byte order into
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   155
 * big endian byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   156
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   157
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   158
 * GDOUBLE_FROM_LE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   159
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   160
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   161
 * Convert 64-bit floating point value (double) from little endian byte order
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   162
 * into native byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   163
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   164
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   165
 * GDOUBLE_FROM_BE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   166
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   167
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   168
 * Convert 64-bit floating point value (double) from big endian byte order
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   169
 * into native byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   170
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   171
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   172
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   173
 * GFLOAT_TO_LE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   174
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   175
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   176
 * Convert 32-bit floating point value (float) from native byte order into
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   177
 * little endian byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   178
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   179
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   180
 * GFLOAT_TO_BE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   181
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   182
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   183
 * Convert 32-bit floating point value (float) from native byte order into
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   184
 * big endian byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   185
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   186
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   187
 * GFLOAT_FROM_LE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   188
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   189
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   190
 * Convert 32-bit floating point value (float) from little endian byte order
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   191
 * into native byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   192
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   193
/**
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   194
 * GFLOAT_FROM_BE:
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   195
 * @val: value
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   196
 *
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   197
 * Convert 32-bit floating point value (float) from big endian byte order
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   198
 * into native byte order.
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   199
 */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   200
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   201
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   202
#define GFLOAT_TO_LE(val)    ((gfloat) (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   203
#define GFLOAT_TO_BE(val)    (GFLOAT_SWAP_LE_BE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   204
#define GDOUBLE_TO_LE(val)   ((gdouble) (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   205
#define GDOUBLE_TO_BE(val)   (GDOUBLE_SWAP_LE_BE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   206
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   207
#elif G_BYTE_ORDER == G_BIG_ENDIAN
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   208
#define GFLOAT_TO_LE(val)    (GFLOAT_SWAP_LE_BE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   209
#define GFLOAT_TO_BE(val)    ((gfloat) (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   210
#define GDOUBLE_TO_LE(val)   (GDOUBLE_SWAP_LE_BE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   211
#define GDOUBLE_TO_BE(val)   ((gdouble) (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   212
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   213
#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   214
#error unknown ENDIAN type
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   215
#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   216
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   217
#define GFLOAT_FROM_LE(val)  (GFLOAT_TO_LE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   218
#define GFLOAT_FROM_BE(val)  (GFLOAT_TO_BE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   219
#define GDOUBLE_FROM_LE(val) (GDOUBLE_TO_LE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   220
#define GDOUBLE_FROM_BE(val) (GDOUBLE_TO_BE (val))
7e817e7e631c Revert incorrect RCL_3 drop:
Pat Downey <patd@symbian.org>
parents: 29
diff changeset
   221
0
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   222
G_END_DECLS
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   223
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   224
#endif /* __FLOATCAST_H__ */
0e761a78d257 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   225