+;; ELMO status structure.
+(defmacro elmo-message-status (folder number &optional flags killed)
+ "Make ELMO status structure from FOLDER and NUMBER.
+A value in this structure is cached at first access."
+ `(vector ,folder ,number ,flags ,killed))
+
+(defmacro elmo-message-status-folder (status)
+ `(aref ,status 0))
+
+(defmacro elmo-message-status-number (status)
+ `(aref ,status 1))
+
+(defmacro elmo-message-status-set-flags (status flags)
+ `(aset ,status 2 (or ,flags '(read))))
+
+(defsubst elmo-message-status-flags (status)
+ (or (aref status 2)
+ (elmo-message-status-set-flags
+ status
+ (elmo-message-flags (elmo-message-status-folder status)
+ (elmo-message-status-number status)))))
+
+(defsubst elmo-message-status-cached-p (status)
+ (memq 'cached (elmo-message-status-flags status)))
+
+(defmacro elmo-message-status-set-killed (status killed)
+ `(aset ,status 3 (if ,killed 'killed 'living)))
+
+(defsubst elmo-message-status-killed-p (status)
+ (eq 'killed
+ (or (aref status 3)
+ (elmo-message-status-set-killed
+ status
+ (elmo-message-killed-p (elmo-message-status-folder status)
+ (elmo-message-status-number status))))))
+