.\" Copyright (C) 2001 Information-technology Promotion Agency (IPA) .\" Copyright (C) 2001-2011 .\" National Institute of Advanced Industrial Science and Technology (AIST) .\" This file is part of the m17n library documentation. .\" Permission is granted to copy, distribute and/or modify this document .\" under the terms of the GNU Free Documentation License, Version 1.2 or .\" any later version published by the Free Software Foundation; with no .\" Invariant Section, no Front-Cover Texts, .\" and no Back-Cover Texts. A copy of the license is included in the .\" appendix entitled "GNU Free Documentation License". .TH "m17n_object" 3m17n "Mon Sep 25 2023" "Version 1.8.4" "The m17n Library" \" -*- nroff -*- .ad l .nh .SH NAME m17n_object \- .SH SYNOPSIS void* \fBm17n_object\fP (int \fIsize\fP, void(*)(void *) \fIfreer\fP) .SH DESCRIPTION .PP .nf @brief Allocate a managed object. The m17n_object() function allocates a new managed object of @b size bytes and sets its reference count to 1. @b freer is the function that is used to free the object when the reference count becomes 0. If @b freer is NULL, the object is freed by the free() function. The heading bytes of the allocated object is occupied by #M17NObjectHead. That area is reserved for the m17n library and application programs should never touch it. @par Return value: This function returns a newly allocated object. @par Errors: This function never fails. .fi .fi .PP .SH Example: .PP .RS 4 .PP .nf typedef struct { M17NObjectHead head; int mem1; char *mem2; } MYStruct; void my_freer (void *obj) { free (((MYStruct *) obj)\->mem2); free (obj); } void my_func (MText *mt, MSymbol key, int num, char *str) { MYStruct *st = m17n_object (sizeof (MYStruct), my_freer); st\->mem1 = num; st\->mem2 = strdup (str); /* KEY must be a managing key\&. */ mtext_put_prop (mt, 0, mtext_len (mt), key, st); /* This sets the reference count of ST back to 1\&. */ m17n_object_unref (st); } .fi .fi .RE .PP .SH COPYRIGHT Copyright (C) 2001 Information\-technology Promotion Agency (IPA) .br Copyright (C) 2001\-2011 National Institute of Advanced Industrial Science and Technology (AIST) .br Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License .