Libmagicxx v10.0.3
A modern C++23 wrapper for libmagic — the library that powers the Unix file command.
Loading...
Searching...
No Matches
Implementation Details

Internal implementation details for the Magic class. More...

Collaboration diagram for Implementation Details:

Topics

 Constructors
 MagicPrivate construction methods.
 Special Member Functions
 Move, copy, and destruction operations.
 Validity Checking
 Database validation methods.
 Instance Control
 Instance lifecycle management.
 Flag Management
 Flag retrieval methods.
 Parameter Management
 Parameter retrieval methods.
 File Identification
 Core file type detection methods.
 State Queries
 Instance state inspection methods.
 Database Loading
 Magic database loading methods.
 Open Reopen
 Instance initialization methods.
 Flag Modification
 Flag modification methods.
 Parameter Modification
 Parameter modification methods.
 Error Handling
 Centralized exception throwing utilities.
 Member Variables
 Core state variables for lifecycle management.
 Validation Option Masks
 Pre-computed option masks for file identification.
 Libmagic Constants
 Constants for libmagic integration.
 Libmagic Type Aliases
 Type definitions for libmagic interoperability.
 Friend Declarations For ToString Access To Private Constants
 Friend declarations for string conversion access.

Namespaces

namespace  Recognition::Detail
 Internal namespace for libmagic C library integration.

Classes

class  Recognition::Magic::MagicPrivate
 PIMPL implementation class for Magic. More...
struct  Recognition::Magic::MagicPrivate::FlagsConverter
 Converter between C++ flag types and libmagic flag values. More...
struct  Recognition::Magic::MagicPrivate::LibmagicPairConverter
 Extracts values from libmagic constant pairs. More...

Detailed Description

Internal implementation details for the Magic class.

This group contains implementation-specific types, constants, and helper classes used by the Magic class PIMPL implementation.

Quick Start (Internal Usage)

// MagicPrivate is accessed only through the Magic public interface
Magic magic{Magic::Flags::Mime};
// Internally, Magic delegates to MagicPrivate:
// magic.IdentifyFile(path) -> m_impl->IdentifyFile(path)
auto type = magic.IdentifyFile("/path/to/file");
@ Mime
Definition magic.hpp:328

Error Handling

Internal methods use a template-based approach for consistent error handling:

  • ThrowExceptionOnFailure: Validates preconditions and throws on failure
  • GetErrorMessage(): Retrieves libmagic error strings
// Throwing version pattern
void MagicPrivate::SomeMethod() {
ThrowExceptionOnFailure<MagicIsClosed>(IsOpen());
auto result = Detail::magic_operation(m_cookie.get());
ThrowExceptionOnFailure<MagicOperationError>(result, GetErrorMessage());
}
// Noexcept version pattern
std::expected<T, E> MagicPrivate::SomeMethod(std::nothrow_t) noexcept {
if (!IsOpen()) {
return std::unexpected{"Magic is closed"};
}
// ... operation ...
}