summaryrefslogtreecommitdiff
path: root/connect/ncbi_connector.c
blob: 9a4f2f62403b6a0fd8544df441515a7204a21c14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* $Id: ncbi_connector.c,v 6.7 2002/08/13 19:29:49 lavr Exp $
 * ===========================================================================
 *
 *                            PUBLIC DOMAIN NOTICE
 *               National Center for Biotechnology Information
 *
 *  This software/database is a "United States Government Work" under the
 *  terms of the United States Copyright Act.  It was written as part of
 *  the author's official duties as a United States Government employee and
 *  thus cannot be copyrighted.  This software/database is freely available
 *  to the public for use. The National Library of Medicine and the U.S.
 *  Government have not placed any restriction on its use or reproduction.
 *
 *  Although all reasonable efforts have been taken to ensure the accuracy
 *  and reliability of the software and data, the NLM and the U.S.
 *  Government do not and cannot warrant the performance or results that
 *  may be obtained by using this software or data. The NLM and the U.S.
 *  Government disclaim all warranties, express or implied, including
 *  warranties of performance, merchantability or fitness for any particular
 *  purpose.
 *
 *  Please cite the author in any work or product based on this material.
 *
 * ===========================================================================
 *
 * Author:  Anton Lavrentiev
 *
 * File Description:
 *   This is generally not for the public use.
 *   Implementation of functions of meta-connector.
 *
 */

#include "ncbi_priv.h"
#include <connect/ncbi_connector.h>


/* Standard logging message
 */
#define METACONN_LOG(level, descr)                      \
  CORE_LOGF(level,                                      \
            ("%s (connector \"%s\", error \"%s\")",     \
            descr, (*meta->get_type)(meta->c_get_type), \
            IO_StatusStr(status)))


extern EIO_Status METACONN_Remove
(SMetaConnector* meta,
 CONNECTOR       connector)
{
    if (connector) {
        CONNECTOR x_conn;
        
        for (x_conn = meta->list; x_conn; x_conn = x_conn->next)
            if (x_conn == connector)
                break;
        if (!x_conn) {
            EIO_Status status = eIO_Unknown;
            METACONN_LOG(eLOG_Error,
                         "[METACONN_Remove]  Connector is not in connection");
            return status;
        }
    }

    while (meta->list) {
        CONNECTOR victim = meta->list;

        meta->list = victim->next;
        victim->meta = 0;
        victim->next = 0;
        if (victim->destroy)
            victim->destroy(victim);
        if (victim == connector)
            break;
    }

    return eIO_Success;
}


extern EIO_Status METACONN_Add
(SMetaConnector* meta,
 CONNECTOR       connector)
{
    assert(connector && meta);

    if (connector->next || !connector->setup) {
        EIO_Status status = eIO_Unknown;
        METACONN_LOG(eLOG_Error,
                     "[METACONN_Add]  Input connector is in use/uninitable");
        return status;
    }

    connector->setup(meta, connector);
    connector->meta = meta;
    connector->next = meta->list;
    meta->list = connector;

    return eIO_Success;
}


/*
 * --------------------------------------------------------------------------
 * $Log: ncbi_connector.c,v $
 * Revision 6.7  2002/08/13 19:29:49  lavr
 * Log moved to end
 *
 * Revision 6.6  2002/04/26 16:31:06  lavr
 * Minor style changes in call-by-pointer functions
 *
 * Revision 6.5  2002/03/22 22:17:29  lavr
 * No <stdlib.h> needed in here, removed
 *
 * Revision 6.4  2001/03/02 20:07:56  lavr
 * Typo fixed
 *
 * Revision 6.3  2001/01/25 16:57:08  lavr
 * METACONN_Remove revoked call to free() with connector:
 * connector's DESTROY method is now (back) responsible to call free().
 *
 * Revision 6.2  2001/01/12 23:51:38  lavr
 * Message logging modified for use LOG facility only
 *
 * Revision 6.1  2000/12/29 17:49:29  lavr
 * Initial revision
 *
 * ==========================================================================
 */