blob: 538e49df1145e568a0c7881e6020cd2044d359db [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* xmpl_perf_server_implx.c
* perf_server_impl functions which would ordinarily not be subject to edit.
*/
#include "apr_time.h" /* some apr must be included first */
#include "xmpl_perf_server_impl.h"
#include "etch_global.h"
#include "etch_url.h"
#include <tchar.h>
#include <stdio.h>
#include <conio.h>
int destroy_perf_server_impl (perf_server_impl*);
/* - - - - - - - - - - - - - - - - - - - - - - - -
* server_impl private construction / destruction
* - - - - - - - - - - - - - - - - - - - - - - - -
*/
/**
* init_perf_server_impl()
* called by perf_server_impl constructor to instantiate server implementation
* object and initialize with default virtuals.
* @param client the remote client, not owned.
* @param usermem_dtor destructor for any custom memory allocations.
*/
perf_server_impl* init_perf_server_impl (perf_remote_client* client,
etch_destructor usermem_dtor)
{
perf_server_impl* ps = (perf_server_impl*) new_object (sizeof(perf_server_impl),
ETCHTYPEB_EXESERVERIMPL, CLASSID_EXESERVERBASE_IMPL);
ps->client = client; /* not owned */
ps->destroy = destroy_perf_server_impl; /* private destructor */
ps->destroyex = usermem_dtor; /* user memory destructor */
/* instantiate base and copy virtuals to this object */
ps->perf_server_base = new_perf_server_base (ps, NULL); /* owned */
ps->iperf = ps->perf_server_base->iperf;
ps->add = ps->perf_server_base->add;
ps->sum = ps->perf_server_base->sum;
ps->report = ps->perf_server_base->report;
ps->dist = ps->perf_server_base->dist;
ps->add2 = ps->perf_server_base->add2;
ps->report2 = ps->perf_server_base->report2;
ps->point = ps->perf_server_base->point;
ps->iobjsession = ps->perf_server_base->iobjsession;
ps->iobjsession->thisx = ps; /* set implementor reference */
ps->_session_control = ps->perf_server_base->_session_control;
ps->_session_notify = ps->perf_server_base->_session_notify;
ps->_session_query = ps->perf_server_base->_session_query;
return ps;
}
/**
* destroy_perf_server_impl()
* perf_server_impl private destructor.
* calls back to user destructor to effect cleanup of any perf_server_impl
* memory which may have been allocated in custom code added by user.
*/
int destroy_perf_server_impl (perf_server_impl* ps)
{
if (NULL == ps) return -1;
if (ps->refcount > 0 && --ps->refcount > 0) return -1;
if (!is_etchobj_static_content(ps))
{
if (ps->destroyex) /* call back to user memory destructor */
ps->destroyex(ps);
if (ps->perf_server_base) /* destroy iobjession, service data */
/* must call dtor directly since virtual dtor is destroy via base */
destroy_perf_server_base (ps->perf_server_base);
//ps->perf_server_base->destroy(ps->perf_server_base);
}
return destroy_objectex((objmask*)ps);
}