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 / Object.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  106 lines

  1. /*
  2.  * java.lang.Object.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 <stdio.h>
  14. #include <assert.h>
  15. #include <memory.h>
  16. #define __jtypes_h
  17. #include "../../kaffevm/gtypes.h"
  18. #include "../../kaffevm/locks.h"
  19. #include <native.h>
  20. #include "../../kaffevm/constants.h"
  21. #include "../../kaffevm/access.h"
  22. #include "../../kaffevm/classMethod.h"    /* Don't need java.lang.Object.h */
  23. #include "../../kaffevm/itypes.h"
  24.  
  25. IMPORT(struct itypes) types[];
  26.  
  27. /*
  28.  * Generate object hash code.
  29.  */
  30. jint
  31. java_lang_Object_hashCode(struct Hjava_lang_Object* o)
  32. {
  33.     /* Hash code is top 26 bits of object's address - objects are
  34.      * at least 64 bytes long.
  35.      */
  36.     return (((jint)o) >> 6);
  37. }
  38.  
  39. /*
  40.  * Return class object for this object.
  41.  */
  42. struct Hjava_lang_Class*
  43. java_lang_Object_getClass(struct Hjava_lang_Object* o)
  44. {
  45.     return (o->dtable->class);
  46. }
  47.  
  48. /*
  49.  * Notify threads waiting here.
  50.  */
  51. void
  52. java_lang_Object_notifyAll(struct Hjava_lang_Object* o)
  53. {
  54.     broadcastCond(o);
  55. }
  56.  
  57. /*
  58.  * Notify a thread waiting here.
  59.  */
  60. void
  61. java_lang_Object_notify(struct Hjava_lang_Object* o)
  62. {
  63.     signalCond(o);
  64. }
  65.  
  66. /*
  67.  * Clone me.
  68.  */
  69. struct Hjava_lang_Object*
  70. java_lang_Object_clone(struct Hjava_lang_Object* o)
  71. {
  72.     object* obj;
  73.     char* sig;
  74.     int type;
  75.  
  76.     sig = o->dtable->class->sig;
  77.  
  78.     if (sig[0] != '[') {
  79.         /* Clone an object */
  80.         obj = AllocObject(o->dtable->class->name);
  81.         memcpy(obj+1, o+1, obj->dtable->class->fsize * 4);
  82.     }
  83.     else if (sig[1] == '[' || sig[1] == 'L') {
  84.         /* Clone an object array */
  85.         obj = AllocObjectArray(o->size, &sig[1]);
  86.         memcpy(obj+1, o+1, o->size * TYPE_SIZE_C('L'));
  87.     }
  88.     else {
  89.         /* Clone an array */
  90.         type = TYPE_TYPE_C(sig[1]);
  91.         obj = AllocArray(o->size, type);
  92.         memcpy(obj+1, o+1, o->size * TYPE_SIZE(type));
  93.     }
  94.  
  95.     return (obj);
  96. }
  97.  
  98. /*
  99.  * Wait for this object to be notified.
  100.  */
  101. void
  102. java_lang_Object_wait(struct Hjava_lang_Object* o, jlong timeout)
  103. {
  104.     waitCond(o, timeout);
  105. }
  106.