#include "TString.h"
#include "TClass.h"
#include "QFramework/TQToken.h"

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>

#include "QFramework/TQLibrary.h"

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQToken:
//
// A TQToken is a container for a single object that can help manage
// its ownership.  Tokens can be retrieved from certain functions,
// which are the owners of the contained objects. Upon return of the
// token, the owner can then delete the object without user
// intervention.
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQToken)


//______________________________________________________________________________________________

TQToken::TQToken() : TObject() {
  // empty constructor
}


//______________________________________________________________________________________________

void TQToken::print() {
  // print the contents of this token (debugging functionality)
  TString name = "<empty>";
  if (fOwner) {
    name = TString::Format("%s::%s", fOwner->IsA()->GetName(), fOwner->GetName());
    if (fOwner->InheritsFrom(TNamed::Class())) {
      name.Append(TString::Format("(%s)", ((TNamed*)fOwner)->GetTitle()));
    }
  }
  INFO("TQToken has owner '%s'", name.Data());
}


//______________________________________________________________________________________________

void TQToken::setContent(void * obj_) {
  // set the contents to a given pointer
  // ownership of the object stays with the caller
  fContent = obj_;
}


//______________________________________________________________________________________________

void * TQToken::getContent() {
  // retrieve the content of the token as a void pointer
  return fContent;
}

TObject * TQToken::getContentAsTObject() {
  // retrieve the content of the token as a TObject pointer
  return (TObject*)fContent;
}

//______________________________________________________________________________________________

void TQToken::setOwner(TObject * obj_) {
  // set the owner of the content to the given object
  fOwner = obj_;
}


//______________________________________________________________________________________________

TObject * TQToken::getOwner() {
  // retrieve the owner of this object
  return fOwner;
}


//______________________________________________________________________________________________

TQToken::~TQToken() {
  // default destructor
  // will not delete content, since ownership stays with owner
  
}


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