blob: 883b65d21a9dbdec30d85fba4dc7956d0bee6f59 (
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
|
// -*- C++ -*-
//=============================================================================
/**
* @file PersistStore.h
*
* $Id$
*
* This flat file demonstrates basic persistence.
*
* @author Rob Ruff <rruff@scires.com>
* @author David A. Hanvey <d.hanvey@qub.ac.uk>
*/
//=============================================================================
#ifndef TAO_PERSIST_STORE_H
#define TAO_PERSIST_STORE_H
#include /**/ "ace/pre.h"
#include "orbsvcs/orbsvcs/DsLogAdminS.h"
#include "tao/Typecode.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "orbsvcs/orbsvcs/DsLogAdminC.h"
#include "ace/Mutex.h"
#define PERSIST_LOG_DEFAULT_MAX_REC_LIST_LEN 250
struct PersistentData
{
DsLogAdmin::RecordId id;
DsLogAdmin::TimeT time;
CORBA::TCKind kind;
int byte_order;
size_t mb_size;
};
/**
* @class TAO_PersistStore
*
* @brief A class for storing DsLogAdmin::LogRecord *'s
*
* This implementation is to serve for illustration purposes.
*/
class TAO_Log_Export TAO_PersistStore
{
public:
// = Initialization and termination methods
/// Constructor.
TAO_PersistStore (CORBA::ULongLong max_size = 0,
CORBA::ULong max_rec_list_len
= PERSIST_LOG_DEFAULT_MAX_REC_LIST_LEN);
/// Destructor.
~TAO_PersistStore (void);
/// Initialization.
int open (const char * file_name);
/// Close the record store.
int close (void);
// = LogRecordStore status methods.
/// Get the current set value of the max size of the log data.
CORBA::ULongLong get_max_size (void);
/// Set the max size of log data. size == 0, => infinite.
void set_max_size (CORBA::ULongLong size);
/// Gets the current size of the log data.
CORBA::ULongLong get_current_size (void);
/// Get the number of records in the log right now.
CORBA::ULongLong get_n_records (void);
// = Record logging, retrieval, update and removal methods
/// Insert rec into storage. Returns 0 on success -1 on failure and 1
/// if the log is full.
int log (DsLogAdmin::LogRecord &rec);
/// Set rec to the pointer to the LogRecord with the given
/// id. Returns 0 on success, -1 on failure.
int retrieve (DsLogAdmin::RecordId id, DsLogAdmin::LogRecord &rec);
/// Return the percentage of the max space that is currently being used,
/// If size is infinite, return 0.
unsigned short get_percentage_full (void);
protected:
/// Assigned to a new RecordId and then incremented.
DsLogAdmin::RecordId maxid_;
/// The maximum size of the log.
CORBA::ULongLong max_size_;
/// The current size (in bytes) of the log.
CORBA::ULongLong current_size_;
/// The current number of records in the log.
CORBA::ULongLong num_records_;
/// The max size of the record list returned in a query.
CORBA::ULong max_rec_list_len_;
/// The file descriptor for the persistent log storage file.
ACE_HANDLE write_persistent_file_;
ACE_HANDLE read_persistent_file_;
/// Lock the log operation.
ACE_Mutex write_lock_;
};
#include /**/ "ace/post.h"
#endif /*TAO_PERSIST_STORE_H*/
|