/* A* ------------------------------------------------------------------- B* This file contains source code for the PyMOL computer program C* Copyright (c) Schrodinger, LLC. D* ------------------------------------------------------------------- E* It is unlawful to modify or remove this copyright notice. F* ------------------------------------------------------------------- G* Please see the accompanying LICENSE file for further information. H* ------------------------------------------------------------------- I* Additional authors of this source file include: -* -* -* Z* ------------------------------------------------------------------- */ #ifndef _H_Tracker #define _H_Tracker #include "PyMOLGlobals.h" /* Tracker is a generic data structure for tracking lists of candidates in a manner that: (1) is robust with respect to creation and deletion of candidates and lists (2) enables efficient iteration over the lists to which a candidate belongs (3) enables efficient iteration over the candidates to which a list belongs (4) is double-linked so that insertion and deletion take constant time (5) keeps running counts so that length determination takes constant time */ struct CTracker; typedef void *TrackerRef; CTracker *TrackerNew(PyMOLGlobals * G); void TrackerFree(CTracker * I); /* creating and deleting candidates, lists, and iterators */ int TrackerNewCand(CTracker * I, TrackerRef * ref); int TrackerDelCand(CTracker * I, int cand_id); int TrackerNewList(CTracker * I, TrackerRef * ref); int TrackerDelList(CTracker * I, int list_id); int TrackerNewListCopy(CTracker * I, int list_id, TrackerRef * ref); int TrackerNewIter(CTracker * I, int cand_id, int list_id); int TrackerDelIter(CTracker * I, int iter_id); /* creating and destroying links */ int TrackerLink(CTracker * I, int cand_id, int list_id, int priority); int TrackerUnlink(CTracker * I, int cand_id, int list_id); /* querying */ int TrackerGetNList(CTracker * I); int TrackerGetNCand(CTracker * I); int TrackerGetNLink(CTracker * I); int TrackerGetNIter(CTracker * I); int TrackerGetNListForCand(CTracker * I, int cand_id); int TrackerGetNCandForList(CTracker * I, int list_id); int TrackerGetCandRef(CTracker * I, int cand_id, TrackerRef ** ref_ret); /* iterating */ int TrackerIterNextCandInList(CTracker * I, int iter_id, TrackerRef ** ref_ret); int TrackerIterNextListInCand(CTracker * I, int iter_id, TrackerRef ** ref_ret); #ifdef TRACKER_UNIT_TEST int TrackerUnitTest(PyMOLGlobals * G); #endif #endif