Update copyright years
[m17n/m17n-lib.git] / src / plist.h
index 24ebef2..13031ae 100644 (file)
@@ -1,5 +1,5 @@
 /* plist.h -- header file for the plist module.
-   Copyright (C) 2003, 2004
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
@@ -17,7 +17,7 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the m17n library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    02111-1307, USA.  */
 
 #ifndef _M17N_PLIST_H_
@@ -35,7 +35,10 @@ struct MPlist
   MSymbol key;
 
   /**en Value of the first element of the plist.  */
-  void *val;
+  union {
+    void *pointer;
+    M17NFunc func;
+  } val;
 
   /**en Plist for the next element. */
   MPlist *next;
@@ -44,7 +47,8 @@ struct MPlist
 /** Macros to access each member of PLIST.  */
 
 #define MPLIST_KEY(plist) ((plist)->key)
-#define MPLIST_VAL(plist) ((plist)->val)
+#define MPLIST_VAL(plist) ((plist)->val.pointer)
+#define MPLIST_FUNC(plist) ((plist)->val.func)
 #define MPLIST_NEXT(plist) ((plist)->next)
 #define MPLIST_TAIL_P(plist) ((plist)->key == Mnil)
 
@@ -55,10 +59,15 @@ struct MPlist
 #define MPLIST_PLIST_P(plist) (MPLIST_KEY (plist) == Mplist)
 
 #define MPLIST_NESTED_P(plist) \
-  (MPLIST_PLIST_P (plist) || ((plist)->control.flag & 1))
+  ((plist)->control.flag & 1)
 #define MPLIST_SET_NESTED_P(plist)     \
   ((plist)->control.flag |= 1)
 
+#define MPLIST_VAL_FUNC_P(plist)       \
+  ((plist)->control.flag & 2)
+#define MPLIST_SET_VAL_FUNC_P(plist)   \
+  ((plist)->control.flag |= 2)
+
 #define MPLIST_SYMBOL(plist) ((MSymbol) MPLIST_VAL (plist))
 #define MPLIST_STRING(plist) ((char *) MPLIST_VAL (plist))
 #define MPLIST_MTEXT(plist) ((MText *) MPLIST_VAL (plist))
@@ -100,10 +109,12 @@ extern MPlist *mplist__from_alist (MPlist *plist);
 
 extern MPlist *mplist__from_string (unsigned char *str, int n);
 
-extern int mplist__serialize (MText *mt, MPlist *plist);
+extern int mplist__serialize (MText *mt, MPlist *plist, int pretty);
 
 extern MPlist *mplist__conc (MPlist *plist, MPlist *tail);
 
 extern void mplist__pop_unref (MPlist *plist);
 
+extern MPlist *mplist__assq (MPlist *plist, MSymbol key);
+
 #endif  /* _M17N_PLIST_H_ */