// @(#)root/hist:$Id$
// Author: Rene Brun   18/08/95

/*************************************************************************
 * 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 "v5/TF1Data.h"

#include "TH1.h"

ClassImp(ROOT::v5::TF1Data)

namespace ROOT {

   namespace v5 {
      
//______________________________________________________________________________
TF1Data::TF1Data(): ROOT::v5::TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 default constructor.

   fXmin      = 0;
   fXmax      = 0;
   fNpx       = 100;
   fType      = 0;
   fNpfits    = 0;
   fNDF       = 0;
   fNsave     = 0;
   fChisquare = 0;
   fParErrors = 0;
   fParMin    = 0;
   fParMax    = 0;
   fSave      = 0;
   fMinimum   = -1111;
   fMaximum   = -1111;
   SetFillStyle(0);
}

//______________________________________________________________________________
TF1Data::~TF1Data()
{
   // TF1 default destructor.

   if (fParMin)    delete [] fParMin;
   if (fParMax)    delete [] fParMax;
   if (fParErrors) delete [] fParErrors;
   if (fSave)      delete [] fSave;
}

//______________________________________________________________________________
void TF1Data::Streamer(TBuffer &b)
{
   // Stream a class object.

   if (b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t v = b.ReadVersion(&R__s, &R__c);
      Streamer(b, v, R__s, R__c, nullptr);
   
   } else {
      // this will be needed if we want to write in old format
      //Int_t saved = 0;
      // if (fType > 0 && fNsave <= 0) { saved = 1; Save(fXmin,fXmax,0,0,0,0);}

      b.WriteClassBuffer(TF1Data::Class(),this);

      //if (saved) {delete [] fSave; fSave = 0; fNsave = 0;}
   }

}

//______________________________________________________________________________
void TF1Data::Streamer(TBuffer &b, Int_t v, UInt_t R__s, UInt_t R__c, const TClass *onfile_class)
{
   // specialized streamer function being able to read old TF1 versions as TF1Data in memory

   //printf("reading TF1Data ..- version  %d..\n",v);
   if (v > 4) {
      b.ReadClassBuffer(ROOT::v5::TF1Data::Class(), this, v, R__s, R__c, onfile_class);
      if (v == 5 && fNsave > 0) {
         //correct badly saved fSave in 3.00/06
         Int_t np = fNsave - 3;
         fSave[np]   = fSave[np-1];
         fSave[np+1] = fXmin;
         fSave[np+2] = fXmax;
      }
      return;
   }
   //====process old versions before automatic schema evolution
   ROOT::v5::TFormula::Streamer(b);
   TAttLine::Streamer(b);
   TAttFill::Streamer(b);
   TAttMarker::Streamer(b);
   if (v < 4) {
      Float_t xmin,xmax;
      b >> xmin; fXmin = xmin;
      b >> xmax; fXmax = xmax;
   } else {
      b >> fXmin;
      b >> fXmax;
      }
   b >> fNpx;
   b >> fType;
   b >> fChisquare;
   b.ReadArray(fParErrors);
   if (v > 1) {
      b.ReadArray(fParMin);
      b.ReadArray(fParMax);
   } else {
      fParMin = new Double_t[fNpar+1];
      fParMax = new Double_t[fNpar+1];
   }
   b >> fNpfits;
   if (v == 1) {
      TH1 * histogram;
      b >> histogram;
      delete histogram; //fHistogram = 0;
   }
   if (v > 1) {
      if (v < 4) {
         Float_t minimum,maximum;
         b >> minimum; fMinimum =minimum;
         b >> maximum; fMaximum =maximum;
      } else {
         b >> fMinimum;
         b >> fMaximum;
      }
   }
   if (v > 2) {
      b >> fNsave;
      if (fNsave > 0) {
         fSave = new Double_t[fNsave+10];
         b.ReadArray(fSave);
         //correct fSave limits to match new version
         fSave[fNsave]   = fSave[fNsave-1];
         fSave[fNsave+1] = fSave[fNsave+2];
         fSave[fNsave+2] = fSave[fNsave+3];
         fNsave += 3;
      } else fSave = 0;
   }
   b.CheckByteCount(R__s, R__c, TF1Data::IsA());
   //====end of old versions
}

   }  // end namespace v5
}   // end namespace ROOT
      
 TF1Data_v5.cxx:1
 TF1Data_v5.cxx:2
 TF1Data_v5.cxx:3
 TF1Data_v5.cxx:4
 TF1Data_v5.cxx:5
 TF1Data_v5.cxx:6
 TF1Data_v5.cxx:7
 TF1Data_v5.cxx:8
 TF1Data_v5.cxx:9
 TF1Data_v5.cxx:10
 TF1Data_v5.cxx:11
 TF1Data_v5.cxx:12
 TF1Data_v5.cxx:13
 TF1Data_v5.cxx:14
 TF1Data_v5.cxx:15
 TF1Data_v5.cxx:16
 TF1Data_v5.cxx:17
 TF1Data_v5.cxx:18
 TF1Data_v5.cxx:19
 TF1Data_v5.cxx:20
 TF1Data_v5.cxx:21
 TF1Data_v5.cxx:22
 TF1Data_v5.cxx:23
 TF1Data_v5.cxx:24
 TF1Data_v5.cxx:25
 TF1Data_v5.cxx:26
 TF1Data_v5.cxx:27
 TF1Data_v5.cxx:28
 TF1Data_v5.cxx:29
 TF1Data_v5.cxx:30
 TF1Data_v5.cxx:31
 TF1Data_v5.cxx:32
 TF1Data_v5.cxx:33
 TF1Data_v5.cxx:34
 TF1Data_v5.cxx:35
 TF1Data_v5.cxx:36
 TF1Data_v5.cxx:37
 TF1Data_v5.cxx:38
 TF1Data_v5.cxx:39
 TF1Data_v5.cxx:40
 TF1Data_v5.cxx:41
 TF1Data_v5.cxx:42
 TF1Data_v5.cxx:43
 TF1Data_v5.cxx:44
 TF1Data_v5.cxx:45
 TF1Data_v5.cxx:46
 TF1Data_v5.cxx:47
 TF1Data_v5.cxx:48
 TF1Data_v5.cxx:49
 TF1Data_v5.cxx:50
 TF1Data_v5.cxx:51
 TF1Data_v5.cxx:52
 TF1Data_v5.cxx:53
 TF1Data_v5.cxx:54
 TF1Data_v5.cxx:55
 TF1Data_v5.cxx:56
 TF1Data_v5.cxx:57
 TF1Data_v5.cxx:58
 TF1Data_v5.cxx:59
 TF1Data_v5.cxx:60
 TF1Data_v5.cxx:61
 TF1Data_v5.cxx:62
 TF1Data_v5.cxx:63
 TF1Data_v5.cxx:64
 TF1Data_v5.cxx:65
 TF1Data_v5.cxx:66
 TF1Data_v5.cxx:67
 TF1Data_v5.cxx:68
 TF1Data_v5.cxx:69
 TF1Data_v5.cxx:70
 TF1Data_v5.cxx:71
 TF1Data_v5.cxx:72
 TF1Data_v5.cxx:73
 TF1Data_v5.cxx:74
 TF1Data_v5.cxx:75
 TF1Data_v5.cxx:76
 TF1Data_v5.cxx:77
 TF1Data_v5.cxx:78
 TF1Data_v5.cxx:79
 TF1Data_v5.cxx:80
 TF1Data_v5.cxx:81
 TF1Data_v5.cxx:82
 TF1Data_v5.cxx:83
 TF1Data_v5.cxx:84
 TF1Data_v5.cxx:85
 TF1Data_v5.cxx:86
 TF1Data_v5.cxx:87
 TF1Data_v5.cxx:88
 TF1Data_v5.cxx:89
 TF1Data_v5.cxx:90
 TF1Data_v5.cxx:91
 TF1Data_v5.cxx:92
 TF1Data_v5.cxx:93
 TF1Data_v5.cxx:94
 TF1Data_v5.cxx:95
 TF1Data_v5.cxx:96
 TF1Data_v5.cxx:97
 TF1Data_v5.cxx:98
 TF1Data_v5.cxx:99
 TF1Data_v5.cxx:100
 TF1Data_v5.cxx:101
 TF1Data_v5.cxx:102
 TF1Data_v5.cxx:103
 TF1Data_v5.cxx:104
 TF1Data_v5.cxx:105
 TF1Data_v5.cxx:106
 TF1Data_v5.cxx:107
 TF1Data_v5.cxx:108
 TF1Data_v5.cxx:109
 TF1Data_v5.cxx:110
 TF1Data_v5.cxx:111
 TF1Data_v5.cxx:112
 TF1Data_v5.cxx:113
 TF1Data_v5.cxx:114
 TF1Data_v5.cxx:115
 TF1Data_v5.cxx:116
 TF1Data_v5.cxx:117
 TF1Data_v5.cxx:118
 TF1Data_v5.cxx:119
 TF1Data_v5.cxx:120
 TF1Data_v5.cxx:121
 TF1Data_v5.cxx:122
 TF1Data_v5.cxx:123
 TF1Data_v5.cxx:124
 TF1Data_v5.cxx:125
 TF1Data_v5.cxx:126
 TF1Data_v5.cxx:127
 TF1Data_v5.cxx:128
 TF1Data_v5.cxx:129
 TF1Data_v5.cxx:130
 TF1Data_v5.cxx:131
 TF1Data_v5.cxx:132
 TF1Data_v5.cxx:133
 TF1Data_v5.cxx:134
 TF1Data_v5.cxx:135
 TF1Data_v5.cxx:136
 TF1Data_v5.cxx:137
 TF1Data_v5.cxx:138
 TF1Data_v5.cxx:139
 TF1Data_v5.cxx:140
 TF1Data_v5.cxx:141
 TF1Data_v5.cxx:142
 TF1Data_v5.cxx:143
 TF1Data_v5.cxx:144
 TF1Data_v5.cxx:145
 TF1Data_v5.cxx:146
 TF1Data_v5.cxx:147
 TF1Data_v5.cxx:148
 TF1Data_v5.cxx:149
 TF1Data_v5.cxx:150
 TF1Data_v5.cxx:151
 TF1Data_v5.cxx:152