DtMmdb: move to lib directory as a standalone library.
This commit is contained in:
357
cde/lib/DtMmdb/oliasdb/c_api_common.C
Normal file
357
cde/lib/DtMmdb/oliasdb/c_api_common.C
Normal file
@@ -0,0 +1,357 @@
|
||||
/*
|
||||
* CDE - Common Desktop Environment
|
||||
*
|
||||
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
||||
*
|
||||
* These libraries and programs are free software; you can
|
||||
* redistribute them and/or modify them under the terms of the GNU
|
||||
* Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* These libraries and programs are distributed in the hope that
|
||||
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
||||
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU Lesser General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with these libraries and programs; if not, write
|
||||
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
||||
* Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
/* $XConsortium: c_api_common.cc /main/5 1996/07/18 16:01:11 drk $ */
|
||||
|
||||
#include "dstr/void_ptr_array.h"
|
||||
#include "storage/page_storage.h"
|
||||
#include "api/info_lib.h"
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
#include "schema/store_desc.h"
|
||||
#include "dynhash/data_t.h"
|
||||
#include "index/index.h"
|
||||
#include "object/compressed_pstring.h"
|
||||
#include "object/pstring.h"
|
||||
|
||||
#include "oliasdb/DtMmdb.h"
|
||||
#include "oliasdb/olias_funcs.h"
|
||||
#include "oliasdb/c_api_common.h"
|
||||
#include "oliasdb/graphic_hd.h"
|
||||
|
||||
#include "exception_init.h"
|
||||
|
||||
void_ptr_array* infolib_array = 0;
|
||||
void_ptr_array* bookcase_array = 0;
|
||||
OLIAS_DB *mmdb_ptr = 0;
|
||||
|
||||
DtMmdbHandle* DtMmdbGroundId;
|
||||
|
||||
void initialize_MMDB()
|
||||
{
|
||||
initialize_exception();
|
||||
|
||||
INIT_EXCEPTIONS();
|
||||
|
||||
cin_ptr = new fstream(0);
|
||||
cout_ptr = new fstream(1);
|
||||
cerr_ptr = new fstream(2);
|
||||
|
||||
g_memory_pool_ptr = new memory_pool;
|
||||
|
||||
page_storage::f_global_pcache_ptr = new page_cache_global_part;
|
||||
|
||||
ostring::input_buf = new char[LBUFSIZ];
|
||||
|
||||
data_t::larson_convertor_ptr = new atoi_larson;
|
||||
data_t::pearson_convertor_ptr = new atoi_pearson(SHRT_MAX, 256);
|
||||
|
||||
ground_ptr = new oid_t(c_code_t(0), i_code_t(0));
|
||||
|
||||
//root::io_info_buffer_ptr = new struct persis_t;
|
||||
|
||||
pstring::v_io_buf_ptr = new buffer(LBUFSIZ);
|
||||
graphic_smart_ptr::local_graphic_buffer_ptr = new buffer(LBUFSIZ);
|
||||
|
||||
compressed_pstring::working_buffer_ptr = new buffer(LBUFSIZ);
|
||||
compressed_pstring::v_cp_io_buf_ptr = new buffer(LBUFSIZ);
|
||||
|
||||
store_desc::v_unixf_pool_ptr =
|
||||
new lru(ACTIVE_UNIXF_SZ, INACTIVE_UNIXF_SZ, false);
|
||||
|
||||
c_index::v_static_key_ptr = new key_type(LBUFSIZ);
|
||||
|
||||
infolib_array = new void_ptr_array(10);
|
||||
bookcase_array = new void_ptr_array(10);
|
||||
}
|
||||
|
||||
void quit_MMDB()
|
||||
{
|
||||
delete c_index::v_static_key_ptr;
|
||||
|
||||
delete store_desc::v_unixf_pool_ptr;
|
||||
|
||||
delete compressed_pstring::working_buffer_ptr;
|
||||
delete compressed_pstring::v_cp_io_buf_ptr;
|
||||
|
||||
delete pstring::v_io_buf_ptr;
|
||||
delete graphic_smart_ptr::local_graphic_buffer_ptr;
|
||||
|
||||
//delete root::io_info_buffer_ptr;
|
||||
|
||||
delete ground_ptr;
|
||||
|
||||
delete data_t::larson_convertor_ptr;
|
||||
delete data_t::pearson_convertor_ptr;
|
||||
|
||||
delete ostring::input_buf;
|
||||
|
||||
delete page_storage::f_global_pcache_ptr;
|
||||
|
||||
delete g_memory_pool_ptr;
|
||||
|
||||
delete cin_ptr ;
|
||||
delete cout_ptr ;
|
||||
delete cerr_ptr ;
|
||||
|
||||
delete infolib_array;
|
||||
delete bookcase_array;
|
||||
|
||||
quit_exception();
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
extern "C" {
|
||||
void DtMmdbInit()
|
||||
{
|
||||
initialize_MMDB();
|
||||
}
|
||||
|
||||
void DtMmdbQuit()
|
||||
{
|
||||
quit_MMDB();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
void* operator new( size_t sz ) throw(std::bad_alloc)
|
||||
#else
|
||||
void* operator new( size_t sz )
|
||||
#endif
|
||||
{
|
||||
void* p = (void*)malloc(sz);
|
||||
//printf("a::operator new called(). sz= %d, allo=%x\n", sz, p);
|
||||
return p;
|
||||
}
|
||||
|
||||
void operator delete( void* p ) throw()
|
||||
{
|
||||
//printf("a::operator free called(). alloc= %x\n", p);
|
||||
if ( p )
|
||||
free((char*)p);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
extern "C" {
|
||||
void* centerline_new(int n, char*, int)
|
||||
{
|
||||
return :: operator new(n);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
info_lib* getInfoLib(int infolib_descriptor)
|
||||
{
|
||||
if ( 0 <= infolib_descriptor && infolib_array &&
|
||||
infolib_descriptor < infolib_array -> no_elmts()
|
||||
)
|
||||
{
|
||||
return (info_lib*)(*infolib_array)[infolib_descriptor];
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
info_base* getBookCase(int bookcase_descriptor)
|
||||
{
|
||||
if ( 0 <= bookcase_descriptor && bookcase_array &&
|
||||
bookcase_descriptor < bookcase_array -> no_elmts()
|
||||
) {
|
||||
return (info_base*)(*bookcase_array)[bookcase_descriptor];
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
oid_t* getPrimiaryOid(DtMmdbInfoRequest* x)
|
||||
{
|
||||
if ( x == 0 ) return 0;
|
||||
|
||||
if ( x -> primary_oid == 0 ) return 0;
|
||||
|
||||
return (oid_t*)(x -> primary_oid -> oid_ptr);
|
||||
}
|
||||
|
||||
oid_t* getSecondaryOid(DtMmdbInfoRequest* x)
|
||||
{
|
||||
if ( x == 0 ) return 0;
|
||||
|
||||
if ( x -> secondary_oid == 0 ) return 0;
|
||||
|
||||
return (oid_t*)(x -> secondary_oid -> oid_ptr);
|
||||
}
|
||||
|
||||
int getSeqNum(DtMmdbInfoRequest* x)
|
||||
{
|
||||
if ( x == 0 ) return -1;
|
||||
return x -> sequence_num;
|
||||
}
|
||||
|
||||
const char* getLocator(DtMmdbInfoRequest* x)
|
||||
{
|
||||
if ( x == 0 ) return 0;
|
||||
|
||||
return x -> locator_ptr;
|
||||
}
|
||||
|
||||
DtMmdbHandle* newDtMmdbHandle(const oid_t& x)
|
||||
{
|
||||
oid_t* y = new oid_t(x);
|
||||
DtMmdbHandle *z = (DtMmdbHandle*)malloc(sizeof(DtMmdbHandle));
|
||||
z -> oid_ptr = (void*)y;
|
||||
return z;
|
||||
}
|
||||
|
||||
DtMmdbGraphicInfo* newDtMmdbGraphicInfo()
|
||||
{
|
||||
DtMmdbGraphicInfo *z =
|
||||
(DtMmdbGraphicInfo*)malloc(sizeof(DtMmdbGraphicInfo));
|
||||
return z;
|
||||
}
|
||||
|
||||
void DtMmdbFreeHandle(DtMmdbHandle* x)
|
||||
{
|
||||
if ( x ) {
|
||||
// delete x -> oid_ptr;
|
||||
free((void*)x);
|
||||
}
|
||||
}
|
||||
|
||||
void DtMmdbFreeHandleList(DtMmdbHandle** list)
|
||||
{
|
||||
if ( list ) {
|
||||
int i = 0;
|
||||
while ( list[i] ) {
|
||||
DtMmdbFreeHandle(list[i]);
|
||||
i++;
|
||||
}
|
||||
free((void*)list);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef REGRESSION_TEST
|
||||
extern int auto_test(int argc, char** argv, OLIAS_DB& db);
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
int auto_test_c_api(int argc, char** argv)
|
||||
{
|
||||
mtry
|
||||
{
|
||||
#ifdef REGRESSION_TEST
|
||||
OLIAS_DB db;
|
||||
return auto_test(argc, argv, db);
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
mcatch (mmdbException &,e)
|
||||
{
|
||||
cerr << "Exception msg: " << e << "\n";
|
||||
return -1;
|
||||
}
|
||||
end_try;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
DtMmdbInfoRequest* newDtMmdbInfoRequestWithLoc(int bc_id, char* loc)
|
||||
{
|
||||
DtMmdbInfoRequest* x =
|
||||
(DtMmdbInfoRequest*) malloc(sizeof(DtMmdbInfoRequest));
|
||||
|
||||
|
||||
x -> bookcase_descriptor = bc_id ;
|
||||
x -> primary_oid = 0;
|
||||
x -> secondary_oid = 0;
|
||||
x -> locator_ptr = loc;
|
||||
return x;
|
||||
}
|
||||
|
||||
DtMmdbInfoRequest* newDtMmdbInfoRequestWithPrimaryOid(int bc_id, char* oid_str)
|
||||
{
|
||||
DtMmdbInfoRequest* x =
|
||||
(DtMmdbInfoRequest*) malloc(sizeof(DtMmdbInfoRequest));
|
||||
|
||||
|
||||
x -> bookcase_descriptor = bc_id ;
|
||||
x -> locator_ptr = 0;
|
||||
x -> primary_oid = newDtMmdbHandle(oid_t(oid_str, true, false));
|
||||
x -> secondary_oid = 0;
|
||||
return x;
|
||||
}
|
||||
|
||||
DtMmdbInfoRequest* newDtMmdbInfoRequestWithSecondaryOid(int bc_id, char* oid_str)
|
||||
{
|
||||
DtMmdbInfoRequest* x =
|
||||
(DtMmdbInfoRequest*) malloc(sizeof(DtMmdbInfoRequest));
|
||||
|
||||
|
||||
x -> bookcase_descriptor = bc_id ;
|
||||
x -> locator_ptr = 0;
|
||||
x -> primary_oid = 0;
|
||||
x -> secondary_oid = newDtMmdbHandle(oid_t(oid_str, true, false));
|
||||
return x;
|
||||
}
|
||||
|
||||
DtMmdbInfoRequest* newDtMmdbInfoRequestWithSeqnum(int bc_id, char* str)
|
||||
{
|
||||
DtMmdbInfoRequest* x =
|
||||
(DtMmdbInfoRequest*) malloc(sizeof(DtMmdbInfoRequest));
|
||||
|
||||
|
||||
x -> bookcase_descriptor = bc_id ;
|
||||
x -> locator_ptr = 0;
|
||||
x -> primary_oid = 0;
|
||||
x -> secondary_oid = 0;
|
||||
x -> sequence_num = atoi(str);
|
||||
return x;
|
||||
}
|
||||
|
||||
char* DtMmdbHandleToString(DtMmdbHandle* x)
|
||||
{
|
||||
static char buf[100];
|
||||
if ( x -> oid_ptr) {
|
||||
oid_t *z = (oid_t*)(x -> oid_ptr);
|
||||
snprintf(buf, sizeof(buf), "%d.%d", z -> ccode(), (int)z -> icode());
|
||||
} else
|
||||
buf[0] = 0;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void DtMmdbFreeInfoRequest(DtMmdbInfoRequest* x)
|
||||
{
|
||||
if ( x ) {
|
||||
DtMmdbFreeHandle(x-> primary_oid);
|
||||
DtMmdbFreeHandle(x-> secondary_oid);
|
||||
free(x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user