// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _OSD_Protection_HeaderFile
#define _OSD_Protection_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <OSD_SingleProtection.hxx>
#include <Standard_Integer.hxx>
class OSD_FileNode;
class OSD_File;
class OSD_Directory;


//! This  class provides data to manage file protection
//! Example:These rights are treated in a system dependent manner :
//! On UNIX you have User,Group and Other rights
//! On VMS  you have Owner,Group,World and System rights
//! An automatic conversion is done between OSD and UNIX/VMS.
//!
//! OSD	VMS	UNIX
//! User     Owner   User
//! Group    Group   Group
//! World    World   Other
//! System   System  (combined with Other)
//!
//! When you use System protection on UNIX you must know that
//! Other rights and System rights are inclusively "ORed".
//! So Other with only READ access and System with WRITE access
//! will produce on UNIX Other with READ and WRITE access.
//!
//! This choice comes from the fact that ROOT can't be considered
//! as member of the group nor as user. So it is considered as Other.
class OSD_Protection 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! Initializes global access rights as follows
  //!
  //! User   : Read Write
  //! System : Read Write
  //! Group  : Read
  //! World  : Read
  Standard_EXPORT OSD_Protection();
  
  //! Sets values of fields
  Standard_EXPORT OSD_Protection(const OSD_SingleProtection System, const OSD_SingleProtection User, const OSD_SingleProtection Group, const OSD_SingleProtection World);
  
  //! Retrieves values of fields
  Standard_EXPORT   void Values (OSD_SingleProtection& System, OSD_SingleProtection& User, OSD_SingleProtection& Group, OSD_SingleProtection& World) ;
  
  //! Sets values of fields
  Standard_EXPORT   void SetValues (const OSD_SingleProtection System, const OSD_SingleProtection User, const OSD_SingleProtection Group, const OSD_SingleProtection World) ;
  
  //! Sets protection of 'System'
  Standard_EXPORT   void SetSystem (const OSD_SingleProtection priv) ;
  
  //! Sets protection of 'User'
  Standard_EXPORT   void SetUser (const OSD_SingleProtection priv) ;
  
  //! Sets protection of 'Group'
  Standard_EXPORT   void SetGroup (const OSD_SingleProtection priv) ;
  
  //! Sets protection of 'World'
  Standard_EXPORT   void SetWorld (const OSD_SingleProtection priv) ;
  
  //! Gets protection of 'System'
  Standard_EXPORT   OSD_SingleProtection System()  const;
  
  //! Gets protection of 'User'
  Standard_EXPORT   OSD_SingleProtection User()  const;
  
  //! Gets protection of 'Group'
  Standard_EXPORT   OSD_SingleProtection Group()  const;
  
  //! Gets protection of 'World'
  Standard_EXPORT   OSD_SingleProtection World()  const;
  
  //! Add a right to a single protection.
  //! ex: aProt = RWD
  //! me.Add(aProt,X)  ->  aProt = RWXD
  Standard_EXPORT   void Add (OSD_SingleProtection& aProt, const OSD_SingleProtection aRight) ;
  
  //! Subtract a right to a single protection.
  //! ex: aProt = RWD
  //! me.Sub(aProt,RW) ->  aProt = D
  //! But me.Sub(aProt,RWX) is also valid and gives same result.
  Standard_EXPORT   void Sub (OSD_SingleProtection& aProt, const OSD_SingleProtection aRight) ;


friend class OSD_FileNode;
friend class OSD_File;
friend class OSD_Directory;


protected:





private:

  
  //! Returns System dependent access rights
  //! this is a private method.
  Standard_EXPORT   Standard_Integer Internal()  const;


  OSD_SingleProtection s;
  OSD_SingleProtection u;
  OSD_SingleProtection g;
  OSD_SingleProtection w;


};







#endif // _OSD_Protection_HeaderFile
