DYT/Tool/3rdParty_x64/include/dcmtk/dcmnet/lst.h
2024-11-22 23:19:31 +08:00

146 lines
3.8 KiB
C++

/*
*
* Copyright (C) 1994-2011, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmnet
*
* Author: Marco Eichelberg
*
* Purpose: List class with procedural API compatible to MIR CTN
*
*/
#ifndef LST_H
#define LST_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/ofstd/ofcond.h"
#include "dcmtk/ofstd/oflist.h"
#include "dcmtk/dcmnet/dndefine.h"
/** general purpose list class for use with dcmnet module.
*/
class DCMTK_DCMNET_EXPORT LST_HEAD
{
public:
/// default constructor
LST_HEAD();
/// destructor, deletes list but not elements pointed to by list entries.
~LST_HEAD();
/** inserts after the last element of the list.
* @param node value inserted into the list
*/
void push_back(void *node);
/** removes first element from list and returns it.
* Returns NULL if list is empty.
*/
void *dequeue();
/** returns number of elements in the list.
* @return number of elements
*/
size_t size() const;
/** returns the first element in the list.
* @return first element in list, NULL if list empty
*/
void *front();
/** Make a node current and return the argument.
* @param node pointer to element which must be contained in the list
* @return pointer to node if successful, NULL otherwise
*/
void *position(void *node);
/** Advances the current element to the next element in the list
* and returns a pointer to the next element (if any), NULL otherwise.
* A valid current element must exist (e.g. position() called with an
* existing element), otherwise the behaviour is undefined.
*/
void *next();
/** Returns pointer to current element in list.
* A valid current element must exist (e.g. position() called with an
* existing element), otherwise the behaviour is undefined.
*/
void *current() const;
private:
/// the list
OFList<void *> theList;
/// list iterator, points to current element
OFListIterator(void *) theIterator;
};
// --------------------------------------------------------------------
// THE FOLLOWING PROCEDURAL API IS COMPATIBLE TO THE MIR CTN LST MODULE
// --------------------------------------------------------------------
/// LST_NODE pseudo-type for MIR List API
typedef void LST_NODE;
/** creates a new list head and returns your handle to it.
*/
DCMTK_DCMNET_EXPORT LST_HEAD *LST_Create();
/** destroys list. The list must be empty.
* The list handle is set to NULL as a side-effect.
*/
DCMTK_DCMNET_EXPORT void LST_Destroy(LST_HEAD **lst);
/** Adds a new node to the tail of the list and returns status.
*/
DCMTK_DCMNET_EXPORT void LST_Enqueue(LST_HEAD **lst, void *node);
/** Removes a node from the head of the list and returns
* a pointer to it.
*/
DCMTK_DCMNET_EXPORT void *LST_Dequeue(LST_HEAD **lst);
/** alias for LST_Dequeue()
*/
DCMTK_DCMNET_EXPORT void *LST_Pop(LST_HEAD **lst);
/** Returns the number of nodes in the list.
*/
DCMTK_DCMNET_EXPORT unsigned long LST_Count(LST_HEAD **lst);
/** Returns a pointer to the node at the head of the list.
* It does NOT remove the node from the list.
*/
DCMTK_DCMNET_EXPORT void *LST_Head(LST_HEAD **lst);
/** Returns a pointer to the current node.
*/
DCMTK_DCMNET_EXPORT void *LST_Current(LST_HEAD **lst);
/** Returns a pointer to the next node in the list and
* makes it current.
*/
DCMTK_DCMNET_EXPORT void *LST_Next(LST_HEAD **lst);
/** Make a node current and return the argument.
* Note: node = lst_position(list, lst_head(list));
* makes the node at the head of the list current
* and returns a pointer to it.
*/
DCMTK_DCMNET_EXPORT void *LST_Position(LST_HEAD **lst, void *node);
#endif