200e7d162f72dff119e017c4dfda60b34df02103
tdreszer
  Mon Sep 27 15:22:14 2010 -0700
Added support for tdbIsContainer() and tdbIsContainerChild()
diff --git src/hg/inc/trackDb.h src/hg/inc/trackDb.h
index 7b94e91..af4d030 100644
--- src/hg/inc/trackDb.h
+++ src/hg/inc/trackDb.h
@@ -61,9 +61,11 @@
 
 #define SUPERTRACK_MASK                 0x10
 #define COMPOSITE_MASK                  0x20
-#define COMPOSITE_VIEW_MASK             0x40
+#define CONTAINER_MASK                  0x80
 #define SUPERTRACK_CHILD_MASK           0x01
 #define COMPOSITE_CHILD_MASK            0x02
+#define COMPOSITE_VIEW_MASK             0x04
+#define CONTAINER_CHILD_MASK            0x08
 #define PARENT_MASK                     0xF0
 #define CHILD_MASK                      0x0F
 #define TREETYPE_MASK                   0xFF
@@ -71,9 +73,11 @@
 #define CHILD_NODE(nodeType)            ((nodeType) & CHILD_MASK)
 #define SUPERTRACK_NODE(nodeType)       (((nodeType) & SUPERTRACK_MASK) == SUPERTRACK_MASK)
 #define COMPOSITE_NODE(nodeType)        (((nodeType) & COMPOSITE_MASK ) == COMPOSITE_MASK )
-#define COMPOSITE_VIEW_NODE(nodeType)   (((nodeType) & COMPOSITE_VIEW_MASK ) == COMPOSITE_VIEW_MASK )
+#define CONTAINER_NODE(nodeType)        (((nodeType) & CONTAINER_MASK ) == CONTAINER_MASK )
 #define SUPERTRACK_CHILD_NODE(nodeType) (((nodeType) & SUPERTRACK_CHILD_MASK) == SUPERTRACK_CHILD_MASK)
 #define COMPOSITE_CHILD_NODE(nodeType)  (((nodeType) & COMPOSITE_CHILD_MASK ) == COMPOSITE_CHILD_MASK )
+#define COMPOSITE_VIEW_NODE(nodeType)   (((nodeType) & COMPOSITE_VIEW_MASK ) == COMPOSITE_VIEW_MASK )
+#define CONTAINER_CHILD_NODE(nodeType)  (((nodeType) & CONTAINER_CHILD_MASK ) == CONTAINER_CHILD_MASK )
 #define INDEPENDENT_NODE(nodeType)      (((nodeType) & TREETYPE_MASK ) == 0 )
 //#define tdbIsParent(tdb)              ((tdb)->subtracks)
 //#define tdbIsChild(tdb)               ((tdb)->parent   )
@@ -100,6 +104,18 @@
 return tdb && tdb->subtracks && COMPOSITE_NODE( tdb->treeNodeType);
 }
 
+INLINE boolean tdbIsContainer( struct trackDb *tdb)
+/* Is this trackDb struct marked as a container with children ?  */
+{
+return tdb && tdb->subtracks && CONTAINER_NODE( tdb->treeNodeType);
+}
+
+INLINE boolean tdbIsContainerOrComposite( struct trackDb *tdb)
+/* Is this trackDb struct marked as a container with children ?  */
+{
+return tdb && tdb->subtracks && (CONTAINER_NODE( tdb->treeNodeType) || COMPOSITE_NODE( tdb->treeNodeType));
+}
+
 INLINE boolean tdbIsSuperTrackChild(struct trackDb *tdb)
 /* Is this trackDb struct marked as a child of a supertrack ?  */
 {
@@ -112,10 +128,22 @@
 return tdb && tdb->parent && COMPOSITE_CHILD_NODE( tdb->treeNodeType);
 }
 
+INLINE boolean tdbIsContainerChild(struct trackDb *tdb)
+/* Is this trackDb struct marked as a child of a container track ?  */
+{
+return tdb && tdb->parent && CONTAINER_CHILD_NODE(tdb->treeNodeType);
+}
+
+INLINE boolean tdbIsContainerOrCompositeChild(struct trackDb *tdb)
+/* Is this trackDb struct marked as a child of a container track ?  */
+{
+return tdb && tdb->parent && (CONTAINER_CHILD_NODE( tdb->treeNodeType) || COMPOSITE_CHILD_NODE( tdb->treeNodeType));
+}
+
 INLINE boolean tdbIsCompositeView(struct trackDb *tdb)
-/* Is this trackDb struct marked as a child of a composite track ?  */
+/* Is this trackDb struct marked as a view of a composite track ?  */
 {
-return tdb && tdb->subtracks && COMPOSITE_VIEW_NODE( tdb->treeNodeType);
+return tdb && tdb->parent && tdb->subtracks && COMPOSITE_VIEW_NODE( tdb->treeNodeType);
 }
 
 INLINE void tdbMarkAsSuperTrack(struct trackDb *tdb)
@@ -130,6 +158,12 @@
 tdb->treeNodeType |= COMPOSITE_MASK;
 }
 
+INLINE void tdbMarkAsContainer( struct trackDb *tdb)
+/* Marks a trackDb struct as a composite track  */
+{
+tdb->treeNodeType |= CONTAINER_MASK;
+}
+
 INLINE void tdbMarkAsSuperTrackChild(struct trackDb *tdb)
 /* Marks a trackDb struct as a child of a supertrack  */
 {
@@ -142,6 +176,12 @@
 tdb->treeNodeType |= COMPOSITE_CHILD_MASK;
 }
 
+INLINE void tdbMarkAsContainerChild( struct trackDb *tdb)
+/* Marks a trackDb struct as a child of a composite track  */
+{
+tdb->treeNodeType |= CONTAINER_CHILD_MASK;
+}
+
 INLINE void tdbMarkAsCompositeView( struct trackDb *tdb)
 /* Marks a trackDb struct as a view of a composite track  */
 {