]> git.saurik.com Git - apple/cf.git/blobdiff - CFTree.h
CF-476.10.tar.gz
[apple/cf.git] / CFTree.h
diff --git a/CFTree.h b/CFTree.h
new file mode 100644 (file)
index 0000000..1262498
--- /dev/null
+++ b/CFTree.h
@@ -0,0 +1,346 @@
+/*
+ * Copyright (c) 2008 Apple Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*     CFTree.h
+       Copyright (c) 1998-2007, Apple Inc. All rights reserved.
+*/
+/*!
+        @header CFTree
+        CFTree implements a container which stores references to other CFTrees.
+        Each tree may have a parent, and a variable number of children.
+*/
+
+#if !defined(__COREFOUNDATION_CFTREE__)
+#define __COREFOUNDATION_CFTREE__ 1
+
+#include <CoreFoundation/CFBase.h>
+
+CF_EXTERN_C_BEGIN
+
+/*!
+        @typedef CFTreeRetainCallBack
+        Type of the callback function used to add a retain to the user-specified
+        info parameter.  This callback may returns the value to use whenever the
+        info parameter is retained, which is usually the value parameter passed
+        to this callback, but may be a different value if a different value
+        should be used.
+        @param info A user-supplied info parameter provided in a CFTreeContext.
+        @result The retained info parameter.
+*/
+typedef const void *   (*CFTreeRetainCallBack)(const void *info);
+
+/*!
+        @typedef CFTreeReleaseCallBack
+        Type of the callback function used to remove a retain previously
+        added to the user-specified info parameter.
+        @param info A user-supplied info parameter provided in a CFTreeContext.
+*/
+typedef void           (*CFTreeReleaseCallBack)(const void *info);
+
+/*!
+        @typedef CFTreeCopyDescriptionCallBack
+        Type of the callback function used to provide a description of the
+        user-specified info parameter.
+        @param info A user-supplied info parameter provided in a CFTreeContext.
+        @result A description of the info parameter.
+*/
+typedef CFStringRef    (*CFTreeCopyDescriptionCallBack)(const void *info);
+
+/*!
+        @typedef CFTreeContext
+        Structure containing user-specified data and callbacks for a CFTree.
+        @field version The version number of the structure type being passed
+                in as a parameter to the CFTree creation function.
+                This structure is version 0.
+        @field info A C pointer to a user-specified block of data.
+        @field retain The callback used to add a retain for the info field.
+                If this parameter is not a pointer to a function of the correct
+                prototype, the behavior is undefined.  The value may be NULL.
+        @field release The calllback used to remove a retain previously added
+                for the info field.  If this parameter is not a pointer to a 
+                function of the correct prototype, the behavior is undefined.
+                The value may be NULL.
+        @field copyDescription The callback used to provide a description of
+                the info field.
+*/
+typedef struct {
+    CFIndex                            version;
+    void *                             info;
+    CFTreeRetainCallBack               retain;
+    CFTreeReleaseCallBack              release;        
+    CFTreeCopyDescriptionCallBack      copyDescription;
+} CFTreeContext;
+
+/*!
+        @typedef CFTreeApplierFunction
+        Type of the callback function used by the apply functions of
+                CFTree.
+        @param value The current value from the CFTree
+        @param context The user-defined context parameter give to the apply
+                function.
+*/
+typedef void (*CFTreeApplierFunction)(const void *value, void *context);
+
+/*!
+        @typedef CFTreeRef
+        This is the type of a reference to CFTrees.
+*/
+typedef struct __CFTree * CFTreeRef;
+
+/*!
+        @function CFTreeGetTypeID
+        Returns the type identifier of all CFTree instances.
+*/
+CF_EXPORT
+CFTypeID CFTreeGetTypeID(void);
+
+/*!
+        @function CFTreeCreate
+        Creates a new mutable tree.
+        @param allocator The CFAllocator which should be used to allocate
+                memory for the tree and storage for its children.  This
+                parameter may be NULL in which case the current default
+                CFAllocator is used.  If this reference is not a valid
+                CFAllocator, the behavior is undefined.
+        @param context A C pointer to a CFTreeContext structure to be copied 
+                and used as the context of the new tree.  The info parameter
+                will be retained by the tree if a retain function is provided.
+                If this value is not a valid C pointer to a CFTreeContext 
+                structure-sized block of storage, the result is undefined. 
+                If the version number of the storage is not a valid CFTreeContext
+                version number, the result is undefined.
+        @result A reference to the new CFTree.
+*/
+CF_EXPORT
+CFTreeRef CFTreeCreate(CFAllocatorRef allocator, const CFTreeContext *context);
+
+/*!
+        @function CFTreeGetParent
+        Returns the parent of the specified tree.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @result The parent of the tree.
+*/
+CF_EXPORT
+CFTreeRef CFTreeGetParent(CFTreeRef tree);
+
+/*!
+        @function CFTreeGetNextSibling
+        Returns the sibling after the specified tree in the parent tree's list.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @result The next sibling of the tree.
+*/
+CF_EXPORT
+CFTreeRef CFTreeGetNextSibling(CFTreeRef tree);
+
+/*!
+        @function CFTreeGetFirstChild
+        Returns the first child of the tree.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @result The first child of the tree.
+*/
+CF_EXPORT
+CFTreeRef CFTreeGetFirstChild(CFTreeRef tree);
+
+/*!
+        @function CFTreeGetContext
+        Returns the context of the specified tree.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @param context A C pointer to a CFTreeContext structure to be filled in with
+                the context of the specified tree.  If this value is not a valid C
+                pointer to a CFTreeContext structure-sized block of storage, the
+                result is undefined.  If the version number of the storage is not
+                a valid CFTreeContext version number, the result is undefined.
+*/
+CF_EXPORT
+void CFTreeGetContext(CFTreeRef tree, CFTreeContext *context);
+
+/*!
+        @function CFTreeGetChildCount
+        Returns the number of children of the specified tree.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @result The number of children.
+*/
+CF_EXPORT
+CFIndex CFTreeGetChildCount(CFTreeRef tree);
+
+/*!
+        @function CFTreeGetChildAtIndex
+        Returns the nth child of the specified tree.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @param idx The index of the child tree to be returned.  If this parameter
+                is less than zero or greater than the number of children of the
+                tree, the result is undefined.
+        @result A reference to the specified child tree.
+*/
+CF_EXPORT
+CFTreeRef CFTreeGetChildAtIndex(CFTreeRef tree, CFIndex idx);
+
+/*!
+        @function CFTreeGetChildren
+        Fills the buffer with children from the tree.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+       @param children A C array of pointer-sized values to be filled with
+               children from the tree.  If this parameter is not a valid pointer to a 
+                C array of at least CFTreeGetChildCount() pointers, the behavior is undefined.
+        @result A reference to the specified child tree.
+*/
+CF_EXPORT
+void CFTreeGetChildren(CFTreeRef tree, CFTreeRef *children);
+
+/*!
+       @function CFTreeApplyFunctionToChildren
+       Calls a function once for each child of the tree.  Note that the applier
+        only operates one level deep, and does not operate on descendents further
+        removed than the immediate children of the tree.
+        @param heap The tree to be operated upon.  If this parameter is not a
+               valid CFTree, the behavior is undefined.
+       @param applier The callback function to call once for each child of
+               the given tree.  If this parameter is not a pointer to a 
+                function of the correct prototype, the behavior is undefined.
+                If there are values in the tree which the applier function does
+                not expect or cannot properly apply to, the behavior is undefined.
+       @param context A pointer-sized user-defined value, which is passed
+               as the second parameter to the applier function, but is
+               otherwise unused by this function.  If the context is not
+               what is expected by the applier function, the behavior is
+               undefined.
+*/
+CF_EXPORT
+void CFTreeApplyFunctionToChildren(CFTreeRef tree, CFTreeApplierFunction applier, void *context);
+
+/*!
+        @function CFTreeFindRoot
+        Returns the root tree of which the specified tree is a descendent.
+        @param tree The tree to be queried.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @result A reference to the root of the tree.
+*/
+CF_EXPORT
+CFTreeRef CFTreeFindRoot(CFTreeRef tree);
+
+/*!
+        @function CFTreeSetContext
+        Replaces the context of a tree.  The tree releases its retain on the
+        info of the previous context, and retains the info of the new context.
+        @param tree The tree to be operated on.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @param context A C pointer to a CFTreeContext structure to be copied 
+                and used as the context of the new tree.  The info parameter
+                will be retained by the tree if a retain function is provided.
+                If this value is not a valid C pointer to a CFTreeContext 
+                structure-sized block of storage, the result is undefined. 
+                If the version number of the storage is not a valid CFTreeContext
+                version number, the result is undefined.
+*/
+CF_EXPORT
+void CFTreeSetContext(CFTreeRef tree, const CFTreeContext *context);
+
+/*!
+        @function CFTreePrependChild
+        Adds the newChild to the specified tree as the first in its list of children.
+        @param tree The tree to be operated on.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @param newChild The child to be added.
+                If this parameter is not a valid CFTree, the behavior is undefined.
+                If this parameter is a tree which is already a child of any tree,
+                the behavior is undefined.
+*/
+CF_EXPORT
+void CFTreePrependChild(CFTreeRef tree, CFTreeRef newChild);
+
+/*!
+        @function CFTreeAppendChild
+        Adds the newChild to the specified tree as the last in its list of children.
+        @param tree The tree to be operated on.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+        @param newChild The child to be added.
+                If this parameter is not a valid CFTree, the behavior is undefined.
+                If this parameter is a tree which is already a child of any tree,
+                the behavior is undefined.
+*/
+CF_EXPORT
+void CFTreeAppendChild(CFTreeRef tree, CFTreeRef newChild);
+
+/*!
+        @function CFTreeInsertSibling
+        Inserts newSibling into the the parent tree's linked list of children after
+        tree.  The newSibling will have the same parent as tree.
+        @param tree The tree to insert newSibling after.  If this parameter is not a valid
+                CFTree, the behavior is undefined.  If the tree does not have a
+                parent, the behavior is undefined.
+        @param newSibling The sibling to be added.
+                If this parameter is not a valid CFTree, the behavior is undefined.
+                If this parameter is a tree which is already a child of any tree,
+                the behavior is undefined.  
+*/
+CF_EXPORT
+void CFTreeInsertSibling(CFTreeRef tree, CFTreeRef newSibling);
+
+/*!
+        @function CFTreeRemove
+        Removes the tree from its parent.
+        @param tree The tree to be removed.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+*/
+CF_EXPORT
+void CFTreeRemove(CFTreeRef tree);
+
+/*!
+        @function CFTreeRemoveAllChildren
+        Removes all the children of the tree.
+        @param tree The tree to remove all children from.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+*/
+CF_EXPORT
+void CFTreeRemoveAllChildren(CFTreeRef tree);
+
+/*!
+        @function CFTreeSortChildren
+        Sorts the children of the specified tree using the specified comparator function.
+        @param tree The tree to be operated on.  If this parameter is not a valid
+                CFTree, the behavior is undefined.
+       @param comparator The function with the comparator function type
+               signature which is used in the sort operation to compare
+               children of the tree with the given value. If this parameter
+               is not a pointer to a function of the correct prototype, the
+               the behavior is undefined. The children of the tree are sorted 
+                from least to greatest according to this function.
+       @param context A pointer-sized user-defined value, which is passed
+               as the third parameter to the comparator function, but is
+               otherwise unused by this function. If the context is not
+               what is expected by the comparator function, the behavior is
+               undefined.
+*/
+CF_EXPORT
+void CFTreeSortChildren(CFTreeRef tree, CFComparatorFunction comparator, void *context);
+
+CF_EXTERN_C_END
+
+#endif /* ! __COREFOUNDATION_CFTREE__ */
+