/* lock.h */
#include "copyrite.h"
#ifndef __LOCK_H
#define __LOCK_H
#include "conf.h"
#include "dbdefs.h"
/* I'm using a string for a lock type instead of a magic-cookie int for
* several reasons:
* 1) I don't think it will hurt efficiency that much. I'll profile it
* to check.
* 2) It will make debugging much easier to see lock types that can easily
* be interpreted by a human.
* 3) It allows the possibility of having arbitrary user-defined locks.
*/
typedef const char *lock_type;
typedef struct lock_list lock_list;
struct lock_list {
lock_type type;
struct boolexp *key;
struct lock_list *next;
};
/* The actual magic cookies. */
extern const lock_type Basic_Lock;
extern const lock_type Enter_Lock;
extern const lock_type Use_Lock;
extern const lock_type Zone_Lock;
extern const lock_type Page_Lock;
extern const lock_type Tport_Lock;
extern const lock_type Speech_Lock; /* Who can speak aloud in me */
extern const lock_type Listen_Lock; /* Who can trigger ^s/ahears on me */
extern const lock_type Parent_Lock; /* Who can @parent to me */
extern const lock_type Link_Lock; /* Who can @link to me */
extern const lock_type Leave_Lock; /* Who can leave me */
extern const lock_type Drop_Lock; /* Who can drop me */
extern const lock_type Give_Lock; /* Who can give me */
extern const lock_type Mail_Lock; /* Who can @mail me */
/* Declare new lock types here! */
/* For the sake of a quick proof-of-concept, we redefine these macros
* for simplicity.
*/
#define Key(x) (getlock((x), Basic_Lock))
#define Enterkey(x) (getlock((x), Enter_Lock))
#define Usekey(x) (getlock((x), Use_Lock))
#endif /* __LOCK_H */