winnt-fixes-20001106
[openafs.git] / src / WINNT / afsclass / c_agg.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef AFSCLASS_AGGREGATE_H
11 #define AFSCLASS_AGGREGATE_H
12
13
14 /*
15  * AGGREGATE CLASS ____________________________________________________________
16  *
17  */
18
19 typedef struct
20    {
21    ULONG dwID;
22    ULONG ckStorageTotal;
23    ULONG ckStorageFree;
24    ULONG ckStorageAllocated;
25    } AGGREGATESTATUS, *LPAGGREGATESTATUS;
26
27 class AGGREGATE
28    {
29    friend class CELL;
30    friend class SERVER;
31    friend class FILESET;
32    friend class IDENT;
33
34    public:
35       void Close (void);
36       void Invalidate (void);
37       void InvalidateAllocation (void);
38       BOOL RefreshStatus (BOOL fNotify = TRUE, ULONG *pStatus = NULL);  // does nothing if not invalidated
39       BOOL RefreshFilesets (BOOL fNotify = TRUE, ULONG *pStatus = NULL);        // does nothing if not invalidated
40
41       // Aggregate properties
42       //
43       LPIDENT GetIdentifier (void);
44       LPCELL OpenCell (ULONG *pStatus = NULL);
45       LPSERVER OpenServer (ULONG *pStatus = NULL);
46       void GetName (LPTSTR pszName);
47       void GetDevice (LPTSTR pszDevice);
48       int GetID (void);
49
50       BOOL GetStatus (LPAGGREGATESTATUS lpas, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
51       short GetGhostStatus (void);      // returns GHOST_*
52
53       PVOID GetUserParam (void);
54       void  SetUserParam (PVOID pUserParam);
55
56       // Filesets within an aggregate
57       //
58       LPFILESET OpenFileset (LPTSTR pszName, ULONG *pStatus = NULL);
59       LPFILESET OpenFileset (VOLUMEID *pvidFileset, ULONG *pStatus = NULL);
60       LPFILESET FilesetFindFirst (HENUM *phEnum, LPIDENT lpiFind, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
61       LPFILESET FilesetFindFirst (HENUM *phEnum, BOOL fNotify = TRUE, ULONG *pStatus = NULL);
62       LPFILESET FilesetFindNext (HENUM *phEnum);
63       void FilesetFindClose (HENUM *phEnum);
64
65    private:
66       AGGREGATE (LPSERVER lpServerParent, LPTSTR pszName, LPTSTR pszDevice);
67       ~AGGREGATE (void);
68       void SendDeleteNotifications (void);
69
70       ULONG CalculateAllocation (BOOL fNotify);
71
72       static BOOL CALLBACK AGGREGATE::KeyFilesetName_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
73       static HASHVALUE CALLBACK AGGREGATE::KeyFilesetName_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
74       static HASHVALUE CALLBACK AGGREGATE::KeyFilesetName_HashData (LPHASHLISTKEY pKey, PVOID pData);
75
76       static BOOL CALLBACK AGGREGATE::KeyFilesetID_Compare (LPHASHLISTKEY pKey, PVOID pObject, PVOID pData);
77       static HASHVALUE CALLBACK AGGREGATE::KeyFilesetID_HashObject (LPHASHLISTKEY pKey, PVOID pObject);
78       static HASHVALUE CALLBACK AGGREGATE::KeyFilesetID_HashData (LPHASHLISTKEY pKey, PVOID pData);
79
80    // Private data
81    //
82    private:
83       LPIDENT m_lpiCell;
84       LPIDENT m_lpiServer;
85       LPIDENT m_lpiThis;
86       TCHAR m_szName[ cchNAME ];
87       TCHAR m_szDevice[ cchNAME ];
88       short m_wGhost;
89       int m_idPartition;
90
91       BOOL m_fFilesetsOutOfDate;
92       LPHASHLIST m_lFilesets;
93       LPHASHLISTKEY m_lkFilesetName;
94       LPHASHLISTKEY m_lkFilesetID;
95
96       BOOL m_fStatusOutOfDate;
97       BOOL m_fAllocationOutOfDate;
98       AGGREGATESTATUS m_as;
99    };
100
101
102 #endif // AFSCLASS_AGGREGATE_H
103