00001 // -*- indent-tabs-mode: nil -*- 00002 00003 #ifndef __ARC_DATAPOINTINDEX_H__ 00004 #define __ARC_DATAPOINTINDEX_H__ 00005 00006 #include <list> 00007 #include <string> 00008 00009 #include <arc/data/DataHandle.h> 00010 #include <arc/data/DataPoint.h> 00011 00012 namespace Arc { 00013 00015 00017 class DataPointIndex 00018 : public DataPoint { 00019 public: 00020 virtual ~DataPointIndex(); 00021 00022 virtual const URL& CurrentLocation() const; 00023 virtual const std::string& CurrentLocationMetadata() const; 00024 virtual DataPoint* CurrentLocationHandle() const; 00025 virtual DataStatus CompareLocationMetadata() const; 00026 virtual bool NextLocation(); 00027 virtual bool LocationValid() const; 00028 virtual bool HaveLocations() const; 00029 virtual bool LastLocation(); 00030 virtual DataStatus RemoveLocation(); 00031 virtual DataStatus RemoveLocations(const DataPoint& p); 00032 virtual DataStatus ClearLocations(); 00033 virtual DataStatus AddLocation(const URL& url, const std::string& meta); 00034 virtual void SortLocations(const std::string& pattern, 00035 const URLMap& url_map); 00036 00037 virtual bool IsIndex() const; 00038 virtual bool IsStageable() const; 00039 virtual bool AcceptsMeta() const; 00040 virtual bool ProvidesMeta() const; 00041 virtual void SetMeta(const DataPoint& p); 00042 virtual void SetCheckSum(const std::string& val); 00043 virtual void SetSize(const unsigned long long int val); 00044 virtual bool Registered() const; 00045 00046 virtual void SetTries(const int n); 00047 00048 // the following are relayed to the current location 00049 virtual long long int BufSize() const; 00050 virtual int BufNum() const; 00051 virtual bool Local() const; 00052 virtual bool ReadOnly() const; 00053 virtual DataStatus PrepareReading(unsigned int timeout, 00054 unsigned int& wait_time); 00055 virtual DataStatus PrepareWriting(unsigned int timeout, 00056 unsigned int& wait_time); 00057 virtual DataStatus StartReading(DataBuffer& buffer); 00058 virtual DataStatus StartWriting(DataBuffer& buffer, 00059 DataCallback *space_cb = NULL); 00060 virtual DataStatus StopReading(); 00061 virtual DataStatus StopWriting(); 00062 virtual DataStatus FinishReading(bool error = false); 00063 virtual DataStatus FinishWriting(bool error = false); 00064 virtual std::vector<URL> TransferLocations() const; 00065 00066 virtual DataStatus Check(); 00067 00068 virtual DataStatus Remove(); 00069 00070 virtual void ReadOutOfOrder(bool v); 00071 virtual bool WriteOutOfOrder(); 00072 00073 virtual void SetAdditionalChecks(bool v); 00074 virtual bool GetAdditionalChecks() const; 00075 00076 virtual void SetSecure(bool v); 00077 virtual bool GetSecure() const; 00078 00079 virtual DataPointAccessLatency GetAccessLatency() const; 00080 00081 virtual void Passive(bool v); 00082 00083 virtual void Range(unsigned long long int start = 0, 00084 unsigned long long int end = 0); 00085 00086 virtual int AddCheckSumObject(CheckSum *cksum); 00087 00088 virtual const CheckSum* GetCheckSumObject(int index) const; 00089 00090 protected: 00091 bool resolved; 00092 bool registered; 00093 DataPointIndex(const URL& url, const UserConfig& usercfg, PluginArgument* parg); 00094 00095 private: 00096 // Following members must be kept synchronised hence they are private 00098 std::list<URLLocation> locations; 00099 std::list<URLLocation>::iterator location; 00100 DataHandle *h; 00101 void SetHandle(); 00102 }; 00103 00104 } // namespace Arc 00105 00106 #endif // __ARC_DATAPOINTINDEX_H__