Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TNetXNGFile.h
Go to the documentation of this file.
1 
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
53  Int_t fQueryReadVParams;
54  TString fNewUrl;
55 
56 public:
57  TNetXNGFile() : TFile(),
58  fFile(0), fUrl(0), fMode(XrdCl::OpenFlags::None), fInitCondVar(0),
59  fReadvIorMax(0), fReadvIovMax(0) {}
60  TNetXNGFile(const char *url, const char *lurl, Option_t *mode , const char *title ,
61  Int_t compress , Int_t netopt , Bool_t parallelopen );
62  TNetXNGFile(const char *url, Option_t *mode = "", const char *title = "",
63  Int_t compress = 1, Int_t netopt = 0, Bool_t parallelopen = kFALSE);
64 
65  virtual ~TNetXNGFile();
66 
67  virtual void Init(Bool_t create);
68  virtual void Close(const Option_t *option = "");
69  virtual void Seek(Long64_t offset, ERelativeTo position = kBeg);
70  virtual void SetAsyncOpenStatus(EAsyncOpenStatus status);
71  virtual Long64_t GetSize() const;
72  virtual Int_t ReOpen(Option_t *modestr);
73  virtual Bool_t IsOpen() const;
74  virtual Bool_t WriteBuffer(const char *buffer, Int_t length);
75  virtual void Flush();
76  virtual Bool_t ReadBuffer(char *buffer, Int_t length);
77  virtual Bool_t ReadBuffer(char *buffer, Long64_t position, Int_t length);
78  virtual Bool_t ReadBuffers(char *buffer, Long64_t *position, Int_t *length,
79  Int_t nbuffs);
80  virtual TString GetNewUrl() { return fNewUrl; }
81 
82 private:
83  virtual Bool_t IsUseable() const;
84  virtual Bool_t GetVectorReadLimits();
85  virtual void SetEnv();
86  Int_t ParseOpenMode(Option_t *in, TString &modestr,
87  XrdCl::OpenFlags::Flags &mode, Bool_t assumeRead);
88 
89  TNetXNGFile(const TNetXNGFile &other); // Not implemented
90  TNetXNGFile &operator =(const TNetXNGFile &other); // Not implemented
91 
92  ClassDef(TNetXNGFile, 0) // ROOT class definition
93 };
94 
95 #endif // ROOT_TNetXNGFile