libcamera: file: Use Flags<> class for open flags

Use the newly introduced Flags<> class to store a bitfield of
File::OpenMode in a type-safe way. The existing File::OpenMode enum is
renamed to File::OpenModeFlag to free the File::OpenMode for the Flags<>
type alias.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart 2020-07-25 02:17:48 +03:00
parent 49862904f6
commit 91d06ae2fc
2 changed files with 10 additions and 3 deletions

View file

@ -30,13 +30,15 @@ public:
using MapFlags = Flags<MapFlag>; using MapFlags = Flags<MapFlag>;
enum OpenMode { enum OpenModeFlag {
NotOpen = 0, NotOpen = 0,
ReadOnly = (1 << 0), ReadOnly = (1 << 0),
WriteOnly = (1 << 1), WriteOnly = (1 << 1),
ReadWrite = ReadOnly | WriteOnly, ReadWrite = ReadOnly | WriteOnly,
}; };
using OpenMode = Flags<OpenModeFlag>;
File(const std::string &name); File(const std::string &name);
File(); File();
~File(); ~File();

View file

@ -58,7 +58,7 @@ LOG_DEFINE_CATEGORY(File)
*/ */
/** /**
* \enum File::OpenMode * \enum File::OpenModeFlag
* \brief Mode in which a file is opened * \brief Mode in which a file is opened
* \var File::NotOpen * \var File::NotOpen
* \brief The file is not open * \brief The file is not open
@ -70,6 +70,11 @@ LOG_DEFINE_CATEGORY(File)
* \brief The file is open for reading and writing * \brief The file is open for reading and writing
*/ */
/**
* \typedef File::OpenMode
* \brief A bitwise combination of File::OpenModeFlag values
*/
/** /**
* \brief Construct a File to represent the file \a name * \brief Construct a File to represent the file \a name
* \param[in] name The file name * \param[in] name The file name
@ -168,7 +173,7 @@ bool File::open(File::OpenMode mode)
return false; return false;
} }
int flags = (mode & ReadWrite) - 1; int flags = static_cast<OpenMode::Type>(mode & ReadWrite) - 1;
if (mode & WriteOnly) if (mode & WriteOnly)
flags |= O_CREAT; flags |= O_CREAT;