Logo ROOT   6.07/09
Reference Guide
TNetXNGFile.h
Go to the documentation of this file.
1 // @(#)root/netxng:$Id$
2 /*************************************************************************
3  * Copyright (C) 1995-2013, Rene Brun and Fons Rademakers. *
4  * All rights reserved. *
5  * *
6  * For the licensing terms see $ROOTSYS/LICENSE. *
7  * For the list of contributors see $ROOTSYS/README/CREDITS. *
8  *************************************************************************/
9 
10 #ifndef ROOT_TNetXNGFile
11 #define ROOT_TNetXNGFile
12 
13 ////////////////////////////////////////////////////////////////////////////////
14 // //
15 // TNetXNGFile //
16 // //
17 // Authors: Justin Salmon, Lukasz Janyst //
18 // CERN, 2013 //
19 // //
20 // Enables access to XRootD files using the new client. //
21 // //
22 ////////////////////////////////////////////////////////////////////////////////
23 
24 #include "TFile.h"
25 #include "TSemaphore.h"
26 #ifndef __CLING__
27 #include <XrdCl/XrdClFileSystem.hh>
28 #endif
29 
30 namespace XrdCl {
31  class File;
32  class URL;
33 }
34 class XrdSysCondVar;
35 
36 #ifdef __CLING__
37 namespace XrdCl {
38  struct OpenFlags {
39  enum Flags {None = 0};
40  };
41 }
42 #endif
43 
44 class TNetXNGFile: public TFile {
45 private:
46  XrdCl::File *fFile; // Underlying XRootD file
47  XrdCl::URL *fUrl; // URL of the current file
48  XrdCl::OpenFlags::Flags fMode; // Open mode of the current file
49  XrdSysCondVar *fInitCondVar; // Used to block an async open request
50  // if requested
51  Int_t fReadvIorMax; // Max size of a single readv chunk
52  Int_t fReadvIovMax; // Max number of readv chunks
55 
56 public:
58  fFile(0), fUrl(0), fMode(XrdCl::OpenFlags::None), fInitCondVar(0),
59  fReadvIorMax(0), fReadvIovMax(0) {}
60  TNetXNGFile(const char *url, Option_t *mode = "", const char *title = "",
61  Int_t compress = 1, Int_t netopt = 0, Bool_t parallelopen = kFALSE);
62  virtual ~TNetXNGFile();
63 
64  virtual void Init(Bool_t create);
65  virtual void Close(const Option_t *option = "");
66  virtual void Seek(Long64_t offset, ERelativeTo position = kBeg);
67  virtual void SetAsyncOpenStatus(EAsyncOpenStatus status);
68  virtual Long64_t GetSize() const;
69  virtual Int_t ReOpen(Option_t *modestr);
70  virtual Bool_t IsOpen() const;
71  virtual Bool_t WriteBuffer(const char *buffer, Int_t length);
72  virtual void Flush();
73  virtual Bool_t ReadBuffer(char *buffer, Int_t length);
74  virtual Bool_t ReadBuffer(char *buffer, Long64_t position, Int_t length);
75  virtual Bool_t ReadBuffers(char *buffer, Long64_t *position, Int_t *length,
76  Int_t nbuffs);
77  virtual TString GetNewUrl() { return fNewUrl; }
78 
79 private:
80  virtual Bool_t IsUseable() const;
81  virtual Bool_t GetVectorReadLimits();
82  virtual void SetEnv();
83  Int_t ParseOpenMode(Option_t *in, TString &modestr,
84  XrdCl::OpenFlags::Flags &mode, Bool_t assumeRead);
85 
86  TNetXNGFile(const TNetXNGFile &other); // Not implemented
87  TNetXNGFile &operator =(const TNetXNGFile &other); // Not implemented
88 
89  ClassDef(TNetXNGFile, 0) // ROOT class definition
90 };
91 
92 #endif // ROOT_TNetXNGFile
long long Long64_t
Definition: RtypesCore.h:69
EAsyncOpenStatus
Asynchronous open request status.
Definition: TFile.h:56
const char Option_t
Definition: RtypesCore.h:62
T ReadBuffer(TBufferFile *buf)
One of the template functions used to read objects from messages.
Definition: MPSendRecv.h:157
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
Definition: TFile.h:50
Basic string class.
Definition: TString.h:137
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
ERelativeTo
Definition: TFile.h:169
Int_t fReadvIorMax
Definition: TNetXNGFile.h:51
#define ClassDef(name, id)
Definition: Rtypes.h:254
void Init(TClassEdit::TInterpreterLookupHelper *helper)
Definition: TClassEdit.cxx:119
XrdCl::File * fFile
Definition: TNetXNGFile.h:46
#define None
Definition: TGWin32.h:59
Int_t fReadvIovMax
Definition: TNetXNGFile.h:52
XrdCl::URL * fUrl
Definition: TNetXNGFile.h:47
XrdCl::OpenFlags::Flags fMode
Definition: TNetXNGFile.h:48
virtual TString GetNewUrl()
Definition: TNetXNGFile.h:77
XrdSysCondVar * fInitCondVar
Definition: TNetXNGFile.h:49
TString fNewUrl
Definition: TNetXNGFile.h:54
Int_t fQueryReadVParams
Definition: TNetXNGFile.h:53