summaryrefslogtreecommitdiff
path: root/src/fcstr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fcstr.c')
-rw-r--r--src/fcstr.c168
1 files changed, 53 insertions, 115 deletions
diff --git a/src/fcstr.c b/src/fcstr.c
index b65492d8..8c64ac93 100644
--- a/src/fcstr.c
+++ b/src/fcstr.c
@@ -880,7 +880,7 @@ FcStrBuildFilename (const FcChar8 *path,
if (!path)
return NULL;
- sset = FcStrSetCreateEx (FCSS_ALLOW_DUPLICATES | FCSS_GROW_BY_64);
+ sset = FcStrSetCreateEx (FC_SET_ALLOW_DUPLICATES | FC_SET_GROW_BY_64);
if (!sset)
return NULL;
@@ -901,7 +901,7 @@ FcStrBuildFilename (const FcChar8 *path,
{
len += strlen ((const char *)s) + 1;
}
- list->n = 0;
+ FcStrListFirst (list);
ret = malloc (sizeof (FcChar8) * (len + 1));
if (!ret)
goto bail2;
@@ -1130,96 +1130,56 @@ FcStrCanonFilename (const FcChar8 *s)
FcStrSet *
FcStrSetCreate (void)
{
- return FcStrSetCreateEx (FCSS_DEFAULT);
+ return FcStrSetCreateEx (FC_SET_DEFAULT);
}
FcStrSet *
FcStrSetCreateEx (unsigned int control)
{
- FcStrSet *set = malloc (sizeof (FcStrSet));
- if (!set)
- return 0;
- FcRefInit (&set->ref, 1);
- set->num = 0;
- set->size = 0;
- set->strs = 0;
- set->control = control;
- return set;
+ FcStrSet *set = malloc (sizeof (FcStrSet));
+
+ return (FcStrSet *) FcPtrSetInit (&set->ptrset, control,
+ (FcPtrSetDestroyFunc)FcStrFree,
+ (FcPtrSetCompareFunc)FcStrCmp);
}
-static FcBool
-_FcStrSetGrow (FcStrSet *set, int growElements)
+int
+FcStrSetGetSize (const FcStrSet *set)
{
- /* accommodate an additional NULL entry at the end of the array */
- FcChar8 **strs = malloc ((set->size + growElements + 1) * sizeof (FcChar8 *));
- if (!strs)
- return FcFalse;
- if (set->num)
- memcpy (strs, set->strs, set->num * sizeof (FcChar8 *));
- if (set->strs)
- free (set->strs);
- set->size = set->size + growElements;
- set->strs = strs;
- return FcTrue;
+ return FcPtrSetGetSize (&set->ptrset);
}
-static FcBool
-_FcStrSetAppend (FcStrSet *set, FcChar8 *s)
+int
+FcStrSetGetAllocatedSize (const FcStrSet *set)
{
- if (!FcStrSetHasControlBit (set, FCSS_ALLOW_DUPLICATES))
- {
- if (FcStrSetMember (set, s))
- {
- FcStrFree (s);
- return FcTrue;
- }
- }
- if (set->num == set->size)
- {
- int growElements = FcStrSetHasControlBit (set, FCSS_GROW_BY_64) ? 64 : 1;
- if (!_FcStrSetGrow(set, growElements))
- return FcFalse;
- }
- set->strs[set->num++] = s;
- set->strs[set->num] = 0;
- return FcTrue;
+ return FcPtrSetGetAllocatedSize (&set->ptrset);
+}
+
+const FcChar8 *
+FcStrSetIndex (const FcStrSet *set,
+ int idx)
+{
+ return FcPtrSetIndex (&set->ptrset, idx);
}
FcBool
FcStrSetMember (FcStrSet *set, const FcChar8 *s)
{
- int i;
-
- for (i = 0; i < set->num; i++)
- if (!FcStrCmp (set->strs[i], s))
- return FcTrue;
- return FcFalse;
+ return FcPtrSetMember (&set->ptrset, s);
}
FcBool
FcStrSetEqual (FcStrSet *sa, FcStrSet *sb)
{
- int i;
- if (sa->num != sb->num)
- return FcFalse;
- for (i = 0; i < sa->num; i++)
- if (!FcStrSetMember (sb, sa->strs[i]))
- return FcFalse;
- return FcTrue;
+ return FcPtrSetEqual (&sa->ptrset, &sb->ptrset);
}
FcBool
FcStrSetAdd (FcStrSet *set, const FcChar8 *s)
{
FcChar8 *new = FcStrCopy (s);
- if (!new)
- return FcFalse;
- if (!_FcStrSetAppend (set, new))
- {
- FcStrFree (new);
- return FcFalse;
- }
- return FcTrue;
+
+ return FcPtrSetAdd (&set->ptrset, new);
}
FcBool
@@ -1228,12 +1188,8 @@ FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s)
FcChar8 *new = FcStrCopyFilename (s);
if (!new)
return FcFalse;
- if (!_FcStrSetAppend (set, new))
- {
- FcStrFree (new);
- return FcFalse;
- }
- return FcTrue;
+
+ return FcPtrSetAdd (&set->ptrset, new);
}
FcBool
@@ -1283,52 +1239,40 @@ FcStrSetAddLangs (FcStrSet *strs, const char *languages)
FcBool
FcStrSetDel (FcStrSet *set, const FcChar8 *s)
{
- int i;
-
- for (i = 0; i < set->num; i++)
- if (!FcStrCmp (set->strs[i], s))
- {
- FcStrFree (set->strs[i]);
- /*
- * copy remaining string pointers and trailing
- * NULL
- */
- memmove (&set->strs[i], &set->strs[i+1],
- (set->num - i) * sizeof (FcChar8 *));
- set->num--;
- return FcTrue;
- }
- return FcFalse;
+ return FcPtrSetDel (&set->ptrset, s);
}
/* TODO Make public */
static FcStrSet *
FcStrSetReference (FcStrSet *set)
{
- if (FcRefIsConst (&set->ref))
- return set;
-
- FcRefInc (&set->ref);
- return set;
+ return (FcStrSet *) FcPtrSetReference (&set->ptrset);
}
void
-FcStrSetDestroy (FcStrSet *set)
+FcStrSetConst (FcStrSet *set)
{
- int i;
+ FcPtrSetConst (&set->ptrset);
+}
- /* We rely on this in FcGetDefaultLangs for caching. */
- if (FcRefIsConst (&set->ref))
- return;
+void
+FcStrSetRefReset (FcStrSet *set)
+{
+ FcPtrSetRefReset (&set->ptrset);
+}
- if (FcRefDec (&set->ref) != 1)
- return;
+void
+FcStrSetDestroy (FcStrSet *set)
+{
+ if (FcPtrSetFini (&set->ptrset))
+ free (set);
+}
- for (i = 0; i < set->num; i++)
- FcStrFree (set->strs[i]);
- if (set->strs)
- free (set->strs);
- free (set);
+void
+FcStrSetSort (FcStrSet *set,
+ FcPtrSetCompareFunc func)
+{
+ FcPtrSetSort (&set->ptrset, func);
}
FcStrList *
@@ -1337,32 +1281,26 @@ FcStrListCreate (FcStrSet *set)
FcStrList *list;
list = malloc (sizeof (FcStrList));
- if (!list)
- return 0;
- list->set = set;
- FcStrSetReference (set);
- list->n = 0;
- return list;
+
+ return (FcStrList *) FcPtrListInit (&list->ptrlist, &set->ptrset);
}
void
FcStrListFirst (FcStrList *list)
{
- list->n = 0;
+ FcPtrListFirst (&list->ptrlist);
}
FcChar8 *
FcStrListNext (FcStrList *list)
{
- if (list->n >= list->set->num)
- return 0;
- return list->set->strs[list->n++];
+ return FcPtrListNext (&list->ptrlist);
}
void
FcStrListDone (FcStrList *list)
{
- FcStrSetDestroy (list->set);
+ FcPtrListFini (&list->ptrlist);
free (list);
}