java_locked.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: java_locked.h,v 11.18 2002/05/07 16:12:42 dda Exp $
  8.  */
  9. #ifndef _JAVA_LOCKED_H_
  10. #define _JAVA_LOCKED_H_
  11. /*
  12.  * Used as argument to locked_dbt_get().
  13.  */
  14. typedef enum _OpKind {
  15. inOp, /* setting data in database (passing data in) */
  16. outOp, /* getting data from database to user memory */
  17. inOutOp /* both getting/setting data */
  18. } OpKind;
  19. /*
  20.  * LOCKED_DBT
  21.  *
  22.  * A stack variable LOCKED_DBT should be declared for each Dbt used in a
  23.  * native call to the DB API.  Before the DBT can be used, locked_dbt_get()
  24.  * must be called to temporarily convert any java array found in the
  25.  * Dbt (which has a pointer to a DBT_JAVAINFO struct) to actual bytes
  26.  * in memory that remain locked in place.  These bytes are used during
  27.  * the call to the DB C API, and are released and/or copied back when
  28.  * locked_dbt_put is called.
  29.  */
  30. typedef struct _locked_dbt
  31. {
  32. /* these are accessed externally to locked_dbt_ functions */
  33. DBT_JAVAINFO *javainfo;
  34. unsigned int java_array_len;
  35. jobject jdbt;
  36. /* these are for used internally by locked_dbt_ functions */
  37. jbyte *java_data;
  38. jbyte *before_data;
  39. OpKind kind;
  40. #define LOCKED_ERROR 0x01 /* error occurred */
  41. #define LOCKED_CREATE_DATA 0x02 /* must create data on the fly */
  42. #define LOCKED_REALLOC_NONNULL 0x04 /* DB_DBT_REALLOC flag, nonnull data */
  43. u_int32_t flags;
  44. } LOCKED_DBT;
  45. /* Fill the LOCKED_DBT struct and lock the Java byte array */
  46. extern int locked_dbt_get(LOCKED_DBT *, JNIEnv *, DB_ENV *, jobject, OpKind);
  47. /* unlock the Java byte array */
  48. extern void locked_dbt_put(LOCKED_DBT *, JNIEnv *, DB_ENV *);
  49. /* realloc the Java byte array */
  50. extern int locked_dbt_realloc(LOCKED_DBT *, JNIEnv *, DB_ENV *);
  51. /*
  52.  * LOCKED_STRING
  53.  *
  54.  * A LOCKED_STRING exists temporarily to convert a java jstring object
  55.  * to a char *.  Because the memory for the char * string is
  56.  * managed by the JVM, it must be released when we are done
  57.  * looking at it.  Typically, locked_string_get() is called at the
  58.  * beginning of a function for each jstring object, and locked_string_put
  59.  * is called at the end of each function for each LOCKED_STRING.
  60.  */
  61. typedef struct _locked_string
  62. {
  63. /* this accessed externally to locked_string_ functions */
  64. const char *string;
  65. /* this is used internally by locked_string_ functions */
  66. jstring jstr;
  67. } LOCKED_STRING;
  68. extern int locked_string_get(LOCKED_STRING *, JNIEnv *jnienv, jstring jstr);
  69. extern void locked_string_put(LOCKED_STRING *, JNIEnv *jnienv);  /* this unlocks and frees mem */
  70. #endif /* !_JAVA_LOCKED_H_ */