text: /*=========================================================================
  
    Program:   Visualization Toolkit
    Module:    vtkMPIEventLog.h
  
    Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
    All rights reserved.
    See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
  
       This software is distributed WITHOUT ANY WARRANTY; without even
       the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.  See the above copyright notice for more information.
  
  =========================================================================*/
  /**
   * @class   vtkMPIEventLog
   * @brief   Class for logging and timing.
   *
   *
   * This class is wrapper around MPE event logging functions
   * (available from Argonne National Lab/Missippi State
   * University). It allows users to create events with names
   * and log them. Different log file formats can be generated
   * by changing MPE's configuration. Some of these formats are
   * binary (for examples SLOG and CLOG) and can be analyzed with
   * viewers from ANL. ALOG is particularly useful since it is
   * text based and can be processed with simple scripts.
   *
   * @sa
   * vtkTimerLog vtkMPIController vtkMPICommunicator
   */
  
  #ifndef vtkMPIEventLog_h
  #define vtkMPIEventLog_h
  
  #include "vtkObject.h"
  #include "vtkParallelMPIModule.h" // For export macro
  
  class VTKPARALLELMPI_EXPORT vtkMPIEventLog : public vtkObject
  {
  public:
    vtkTypeMacro(vtkMPIEventLog, vtkObject);
  
    /**
     * Construct a vtkMPIEventLog with the following initial state:
     * Processes = 0, MaximumNumberOfProcesses = 0.
     */
    static vtkMPIEventLog* New();
  
    /**
     * Used to initialize the underlying mpe event.
     * HAS TO BE CALLED BY ALL PROCESSES before any event
     * logging is done.
     * It takes a name and a description for the graphical
     * representation, for example, "red:vlines3". See
     * mpe documentation for details.
     * Returns 0 on MPI failure (or aborts depending on
     * MPI error handlers)
     */
    int SetDescription(const char* name, const char* desc);
  
    ///@{
    /**
     * These methods have to be called once on all processors
     * before and after invoking any logging events.
     * The name of the logfile is given by fileName.
     * See mpe documentation for file formats.
     */
    static void InitializeLogging();
    static void FinalizeLogging(VTK_FILEPATH const char* fileName);
    ///@}
  
    ///@{
    /**
     * Issue start and stop events for this log entry.
     */
    void StartLogging();
    void StopLogging();
    ///@}
  
    void PrintSelf(ostream& os, vtkIndent indent) override;
  
  protected:
    vtkMPIEventLog();
    ~vtkMPIEventLog() override;
  
    static int LastEventId;
    int Active;
    int BeginId;
    int EndId;
  
  private:
    vtkMPIEventLog(const vtkMPIEventLog&) = delete;
    void operator=(const vtkMPIEventLog&) = delete;
  };
  
  #endif
  