home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / lib / native / java.lang / Double.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  74 lines

  1. /*
  2.  * java.lang.Double.c
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  11.  */
  12.  
  13. #include "config.h"
  14. #include <stdlib.h>
  15. #include <native.h>
  16. #include "defs.h"
  17. #include "java.lang.stubs/Double.h"
  18.  
  19. /*
  20.  * Convert double to string.
  21.  */
  22. struct Hjava_lang_String*
  23. java_lang_Double_toString(struct Hjava_lang_Double* none, double val)
  24. {
  25.     char str[MAXNUMLEN];
  26.  
  27.     sprintf(str, "%g", val);
  28.     return (makeJavaString(str, strlen(str)));
  29. }
  30.  
  31. /*
  32.  * Convert string to double object.
  33.  */
  34. struct Hjava_lang_Double*
  35. java_lang_Double_valueOf(struct Hjava_lang_Double* none, struct Hjava_lang_String* str)
  36. {
  37.     struct Hjava_lang_Double* obj;
  38.     char buf[MAXNUMLEN];
  39.     char* endbuf;
  40.  
  41.     javaString2CString(str, buf, sizeof(buf));
  42.  
  43.     obj = (struct Hjava_lang_Double*)execute_java_constructor(0, "java.lang.Double", 0, "()V");
  44. #if defined(HAVE_STRTOD)
  45.     unhand(obj)->value = strtod(buf, &endbuf);
  46.     if (*endbuf != 0) {
  47.         SignalError(0, "java.lang.NumberFormatException", "Bad double format");
  48.     }
  49. #else
  50.     /* Fall back on old atof - no error checking */
  51.     unhand(obj)->value = atof(buf);
  52. #endif
  53.  
  54.     return (obj);
  55. }
  56.  
  57. /*
  58.  * Convert double to jlong.
  59.  */
  60. jlong
  61. java_lang_Double_doubleToLongBits(struct Hjava_lang_Double* none, double val)
  62. {
  63.     return (*(jlong*)&val);
  64. }
  65.  
  66. /*
  67.  * Convert jlong to double.
  68.  */
  69. double
  70. java_lang_Double_longBitsToDouble(struct Hjava_lang_Double* none, jlong val)
  71. {
  72.     return (*(double*)&val);
  73. }
  74.