source: box/trunk/lib/raidfile/RaidFileUtil.h @ 2506

Revision 2506, 2.8 KB checked in by martin, 3 years ago (diff)

Fixes for gcc 4.4.

  • Property svn:eol-style set to native
Line 
1// --------------------------------------------------------------------------
2//
3// File
4//              Name:    RaidFileUtil.h
5//              Purpose: Utilities for the raid file classes
6//              Created: 2003/07/11
7//
8// --------------------------------------------------------------------------
9
10#ifndef RAIDFILEUTIL__H
11#define RAIDFILEUTIL__H
12
13#include "RaidFileController.h"
14#include "RaidFileException.h"
15
16// note: these are hardcoded into the directory searching code
17#define RAIDFILE_EXTENSION                      ".rf"
18#define RAIDFILE_WRITE_EXTENSION        ".rfw"
19
20// --------------------------------------------------------------------------
21//
22// Class
23//              Name:    RaidFileUtil
24//              Purpose: Utility functions for RaidFile classes
25//              Created: 2003/07/11
26//
27// --------------------------------------------------------------------------
28class RaidFileUtil
29{
30public:
31        typedef enum 
32        {
33                NoFile = 0,
34                NonRaid = 1,
35                AsRaid = 2,
36                AsRaidWithMissingReadable = 3,
37                AsRaidWithMissingNotRecoverable = 4
38        } ExistType;
39       
40        enum
41        {
42                Stripe1Exists = 1,
43                Stripe2Exists = 2,
44                ParityExists = 4
45        };
46       
47        static ExistType RaidFileExists(RaidFileDiscSet &rDiscSet, const std::string &rFilename, int *pStartDisc = 0, int *pExisitingFiles = 0, int64_t *pRevisionID = 0);
48       
49        static int64_t DiscUsageInBlocks(int64_t FileSize, const RaidFileDiscSet &rDiscSet);
50       
51        // --------------------------------------------------------------------------
52        //
53        // Function
54        //              Name:    std::string MakeRaidComponentName(RaidFileDiscSet &, const std::string &, int)
55        //              Purpose: Returns the OS filename for a file of part of a disc set
56        //              Created: 2003/07/11
57        //
58        // --------------------------------------------------------------------------   
59        static inline std::string MakeRaidComponentName(RaidFileDiscSet &rDiscSet, const std::string &rFilename, int Disc)
60        {
61                if(Disc < 0 || Disc >= (int)rDiscSet.size())
62                {
63                        THROW_EXCEPTION(RaidFileException, NoSuchDiscSet)
64                }
65                std::string r(rDiscSet[Disc]);
66                r += DIRECTORY_SEPARATOR_ASCHAR;
67                r += rFilename;
68                r += RAIDFILE_EXTENSION;
69                return r;
70        }
71       
72        // --------------------------------------------------------------------------
73        //
74        // Function
75        //              Name:    std::string MakeWriteFileName(RaidFileDiscSet &, const std::string &)
76        //              Purpose: Returns the OS filename for the temporary write file
77        //              Created: 2003/07/11
78        //
79        // --------------------------------------------------------------------------   
80        static inline std::string MakeWriteFileName(RaidFileDiscSet &rDiscSet, const std::string &rFilename, int *pOnDiscSet = 0)
81        {
82                int livesOnSet = rDiscSet.GetSetNumForWriteFiles(rFilename);
83               
84                // does the caller want to know which set it's on?
85                if(pOnDiscSet) *pOnDiscSet = livesOnSet;
86               
87                // Make the string
88                std::string r(rDiscSet[livesOnSet]);
89                r += DIRECTORY_SEPARATOR_ASCHAR;
90                r += rFilename;
91                r += RAIDFILE_WRITE_EXTENSION;
92                return r;
93        }
94};
95
96#endif // RAIDFILEUTIL__H
97
Note: See TracBrowser for help on using the repository browser.