ROOT logo
// @(#)root/hist:$Id$
// Author: David Gonzalez Maline   12/11/09

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TFitResultPtr.h"
#include "TFitResult.h"
#include "TError.h"

/**
TFitResultPtr provides an indirection to the TFitResult class and with a semantics
identical to a TFitResult pointer, i.e. it is like a smart pointer to a TFitResult. 
In addition it provides an automatic comversion to an integer. In this way it can be 
returned from the TH1::Fit method and the change in TH1::Fit be backward compatible. 
The class 

 */

ClassImp(TFitResultPtr)

TFitResultPtr::TFitResultPtr(TFitResult * p) :  
   fStatus(-1), 
   fPointer(p) 
{
   // constructor from a TFitResult pointer
   if (fPointer != 0) fStatus = fPointer->Status(); 
}

TFitResultPtr::TFitResultPtr(const TFitResultPtr& rhs) : 
   fStatus(rhs.fStatus), fPointer(0)
{
   // copy constructor - create a new TFitResult if needed
   if (rhs.fPointer != 0)  fPointer = new TFitResult(*rhs);
}

TFitResultPtr::~TFitResultPtr()
{
   // destructor - delete the contained TFitResult pointer if needed
   if ( fPointer != 0)
      delete fPointer;
}


TFitResult& TFitResultPtr::operator*() const
{
   // implement the de-reference operator to make the class acts as a pointer to a TFitResult
   // assert in case the class does not contain a pointer to TFitResult
   if  (fPointer == 0) { 
      Error("TFitResultPtr","TFitResult is empty - use the fit option S");
      return *(new TFitResult() );
   }
   return *fPointer;
}

TFitResult* TFitResultPtr::operator->() const
{
   // implement the -> operator to make the class acts as a pointer to a TFitResult
   // assert in case the class does not contain a pointer to TFitResult
   if  (fPointer == 0) { 
      Error("TFitResultPtr","TFitResult is empty - use the fit option S");
      return new TFitResult();
   }
   return fPointer;
}


TFitResultPtr & TFitResultPtr::operator=(const TFitResultPtr& rhs) 
{ 
   // assignment operator
   // if needed copy the TFitResult  object and delete previous one if existing
   if ( &rhs == this) return *this; // self assignment
   fStatus = rhs.fStatus; 
   if ( fPointer ) delete fPointer;
   fPointer = 0;
   if (rhs.fPointer != 0)  fPointer = new TFitResult(*rhs);
   return *this;
}

 TFitResultPtr.cxx:1
 TFitResultPtr.cxx:2
 TFitResultPtr.cxx:3
 TFitResultPtr.cxx:4
 TFitResultPtr.cxx:5
 TFitResultPtr.cxx:6
 TFitResultPtr.cxx:7
 TFitResultPtr.cxx:8
 TFitResultPtr.cxx:9
 TFitResultPtr.cxx:10
 TFitResultPtr.cxx:11
 TFitResultPtr.cxx:12
 TFitResultPtr.cxx:13
 TFitResultPtr.cxx:14
 TFitResultPtr.cxx:15
 TFitResultPtr.cxx:16
 TFitResultPtr.cxx:17
 TFitResultPtr.cxx:18
 TFitResultPtr.cxx:19
 TFitResultPtr.cxx:20
 TFitResultPtr.cxx:21
 TFitResultPtr.cxx:22
 TFitResultPtr.cxx:23
 TFitResultPtr.cxx:24
 TFitResultPtr.cxx:25
 TFitResultPtr.cxx:26
 TFitResultPtr.cxx:27
 TFitResultPtr.cxx:28
 TFitResultPtr.cxx:29
 TFitResultPtr.cxx:30
 TFitResultPtr.cxx:31
 TFitResultPtr.cxx:32
 TFitResultPtr.cxx:33
 TFitResultPtr.cxx:34
 TFitResultPtr.cxx:35
 TFitResultPtr.cxx:36
 TFitResultPtr.cxx:37
 TFitResultPtr.cxx:38
 TFitResultPtr.cxx:39
 TFitResultPtr.cxx:40
 TFitResultPtr.cxx:41
 TFitResultPtr.cxx:42
 TFitResultPtr.cxx:43
 TFitResultPtr.cxx:44
 TFitResultPtr.cxx:45
 TFitResultPtr.cxx:46
 TFitResultPtr.cxx:47
 TFitResultPtr.cxx:48
 TFitResultPtr.cxx:49
 TFitResultPtr.cxx:50
 TFitResultPtr.cxx:51
 TFitResultPtr.cxx:52
 TFitResultPtr.cxx:53
 TFitResultPtr.cxx:54
 TFitResultPtr.cxx:55
 TFitResultPtr.cxx:56
 TFitResultPtr.cxx:57
 TFitResultPtr.cxx:58
 TFitResultPtr.cxx:59
 TFitResultPtr.cxx:60
 TFitResultPtr.cxx:61
 TFitResultPtr.cxx:62
 TFitResultPtr.cxx:63
 TFitResultPtr.cxx:64
 TFitResultPtr.cxx:65
 TFitResultPtr.cxx:66
 TFitResultPtr.cxx:67
 TFitResultPtr.cxx:68
 TFitResultPtr.cxx:69
 TFitResultPtr.cxx:70
 TFitResultPtr.cxx:71
 TFitResultPtr.cxx:72
 TFitResultPtr.cxx:73
 TFitResultPtr.cxx:74
 TFitResultPtr.cxx:75
 TFitResultPtr.cxx:76
 TFitResultPtr.cxx:77
 TFitResultPtr.cxx:78
 TFitResultPtr.cxx:79
 TFitResultPtr.cxx:80
 TFitResultPtr.cxx:81
 TFitResultPtr.cxx:82
 TFitResultPtr.cxx:83
 TFitResultPtr.cxx:84