428
+ − 1 /* Opaque Lisp objects.
+ − 2 Copyright (C) 1993 Sun Microsystems, Inc.
+ − 3 Copyright (C) 1995, 1996 Ben Wing.
+ − 4
+ − 5 This file is part of XEmacs.
+ − 6
+ − 7 XEmacs is free software; you can redistribute it and/or modify it
+ − 8 under the terms of the GNU General Public License as published by the
+ − 9 Free Software Foundation; either version 2, or (at your option) any
+ − 10 later version.
+ − 11
+ − 12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ − 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 15 for more details.
+ − 16
+ − 17 You should have received a copy of the GNU General Public License
+ − 18 along with XEmacs; see the file COPYING. If not, write to
+ − 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 20 Boston, MA 02111-1307, USA. */
+ − 21
+ − 22 /* Synched up with: Not in FSF. */
+ − 23
+ − 24 /* Written by Ben Wing, October 1993. */
+ − 25
440
+ − 26 #ifndef INCLUDED_opaque_h_
+ − 27 #define INCLUDED_opaque_h_
428
+ − 28
+ − 29 typedef struct Lisp_Opaque
+ − 30 {
+ − 31 struct lcrecord_header header;
665
+ − 32 Bytecount size;
428
+ − 33 max_align_t data[1];
+ − 34 } Lisp_Opaque;
+ − 35
+ − 36 DECLARE_LRECORD (opaque, Lisp_Opaque);
+ − 37 #define XOPAQUE(x) XRECORD (x, opaque, Lisp_Opaque)
617
+ − 38 #define wrap_opaque(p) wrap_record (p, opaque)
428
+ − 39 #define OPAQUEP(x) RECORDP (x, opaque)
+ − 40 /* #define CHECK_OPAQUE(x) CHECK_RECORD (x, opaque)
+ − 41 Opaque pointers should never escape to the Lisp level, so
+ − 42 functions should not be doing this. */
+ − 43
440
+ − 44 /* Alternative DATA arguments to make_opaque() */
442
+ − 45 #define OPAQUE_CLEAR ((const void *) 0)
+ − 46 #define OPAQUE_UNINIT ((const void *) -1)
428
+ − 47
+ − 48 #define OPAQUE_SIZE(op) ((op)->size)
+ − 49 #define OPAQUE_DATA(op) ((void *) ((op)->data))
+ − 50 #define OPAQUE_MARKFUN(op) ((op)->markfun)
+ − 51 #define XOPAQUE_SIZE(op) OPAQUE_SIZE (XOPAQUE (op))
+ − 52 #define XOPAQUE_DATA(op) OPAQUE_DATA (XOPAQUE (op))
+ − 53 #define XOPAQUE_MARKFUN(op) OPAQUE_MARKFUN (XOPAQUE (op))
+ − 54
665
+ − 55 Lisp_Object make_opaque (const void *data, Bytecount size);
428
+ − 56
+ − 57 typedef struct Lisp_Opaque_Ptr
+ − 58 {
+ − 59 struct lcrecord_header header;
+ − 60 void *ptr;
+ − 61 } Lisp_Opaque_Ptr;
+ − 62
+ − 63 DECLARE_LRECORD (opaque_ptr, Lisp_Opaque_Ptr);
+ − 64 #define XOPAQUE_PTR(x) XRECORD (x, opaque_ptr, Lisp_Opaque_Ptr)
617
+ − 65 #define wrap_opaque_ptr(p) wrap_record (p, opaque_ptr)
428
+ − 66 #define OPAQUE_PTRP(x) RECORDP (x, opaque_ptr)
+ − 67
+ − 68 Lisp_Object make_opaque_ptr (void *val);
+ − 69 void free_opaque_ptr (Lisp_Object ptr);
+ − 70
+ − 71 #define get_opaque_ptr(op) (XOPAQUE_PTR (op)->ptr)
+ − 72 #define set_opaque_ptr(op, ptr_) (XOPAQUE_PTR (op)->ptr = (ptr_))
+ − 73
440
+ − 74 #endif /* INCLUDED_opaque_h_ */