Files
2022-12-13 12:44:04 +01:00

139 lines
4.5 KiB
C++

//-----------------------------------------------------------------------------
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
// Continuous Electron Beam Accelerator Facility
//
// This software was developed under a United States Government license
// described in the NOTICE file included as part of this distribution.
//
//-----------------------------------------------------------------------------
//
// Description:
// RSVC database interface
//
// Author: Jie Chen
//
//
//
//
#ifndef _RSVC_VIRTUAL_DATABASE_H
#define _RSVC_VIRTUAL_DATABASE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rsvcErr.h>
#include <rsvcData.h>
#include <rsvcServerConfig.h>
class rsvcVirtualDbase
{
public:
// constructor
// default constructor, users have to call open explicitly
rsvcVirtualDbase (void);
// constructor: name is a file name, flags are the same flags as
// standard open routine.
// data_size is estimate of each data stored in the database
rsvcVirtualDbase (char* name, int flags, int keyType = RSVC_STRING,
size_t data_size = 496,
size_t cache_size = 0, size_t page_size = 0,
int mode = 0666);
// destructor
virtual ~rsvcVirtualDbase (void);
// operation
// open a database
virtual int open (char* name, int flags, int keyType = RSVC_STRING,
size_t cache_size = 0,
int mode = 0666);
// create a database
virtual int create (char* name, int flags, int keyType = RSVC_STRING,
size_t data_size = 496,
size_t cache_size = 0, size_t page_size = 0,
int mode = 0666);
// close connection to the database
virtual int close (void) {return RSVC_SUCCESS;}
// get a rsvcData.
virtual int get (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// insert a rsvcData which must have a key inside
virtual int put (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// delete a data object pointed by key value
virtual int del (rsvcData& /* key */) {return RSVC_SUCCESS;}
// flush all internal buffer to disk
virtual int flush (void) {return RSVC_SUCCESS;}
// return database name
char* database (void) const {return name_;}
// return file descriptor for the opened database
virtual int fd (void) {return 0;}
// check to see the database is open or not
virtual int opened (void) const {return opened_;}
// iterator for sequential access to database
virtual int cursorInit (void) {return RSVC_SUCCESS;}
// set cursor to the position pointed by key 'key',
// and return data 'data' if successful
virtual int cursorSet (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// move cursor to the next position.
// return CDEV_SUCCESS on success, CDEV_ERROR: check errno
// return CDEV_INVALIDOBJ: no more
virtual int cursorNext (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// move cursor to the previous position
// return CDEV_SUCCESS on success, CDEV_ERROR: check errno
// return CDEV_INVALIDOBJ: no more
virtual int cursorPrev (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// merge current value pointed by cursor:
// this routine can only used to update the data with the same
// or smaller size than the exisiting data
// If you like to update arbitrary size of data, use del and put
virtual int cursorUpdate (rsvcData& /* data */) {return RSVC_SUCCESS;}
// move cursor to the beginning of the database
// no need to provide key
virtual int cursorFirst (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// move cursor to the end of the database
// no need to provide key
virtual int cursorLast (rsvcData& /* data */, rsvcData& /* key */) {return RSVC_SUCCESS;}
// close cursor operation
virtual int cursorFinish (void) {return RSVC_SUCCESS;}
virtual const char* className (void) const {return "rsvcVirtualDbase";}
protected:
// open flag and mode
int flag_;
int mode_;
// page size
size_t page_size_;
// database name
char* name_;
// flag to tell whether this database is opened or not
int opened_;
// key type of this database
int keyType_;
// error status of open or create of this database
int err_;
// deny access to copy and assignment operator
rsvcVirtualDbase (const rsvcVirtualDbase& dbase);
rsvcVirtualDbase& operator = (const rsvcVirtualDbase& dbase);
};
#endif