Cinder  0.8.6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DataSource.h
Go to the documentation of this file.
1 /*
2  Copyright (c) 2010, The Barbarian Group
3  All rights reserved.
4 
5  Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
6 
7  Redistribution and use in source and binary forms, with or without modification, are permitted provided that
8  the following conditions are met:
9 
10  * Redistributions of source code must retain the above copyright notice, this list of conditions and
11  the following disclaimer.
12  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
13  the following disclaimer in the documentation and/or other materials provided with the distribution.
14 
15  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
16  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
17  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
18  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
19  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22  POSSIBILITY OF SUCH DAMAGE.
23 */
24 
25 #pragma once
26 
27 #include "cinder/Cinder.h"
28 #include "cinder/Url.h"
29 #include "cinder/Buffer.h"
30 #include "cinder/Stream.h"
31 #include "cinder/Filesystem.h"
32 
33 namespace cinder {
34 
35 typedef std::shared_ptr<class DataSource> DataSourceRef;
36 
37 class DataSource {
38  public:
39  virtual bool isFilePath() = 0;
40  virtual bool isUrl() = 0;
41 
42  const fs::path& getFilePath();
43  const Url& getUrl();
44  const fs::path& getFilePathHint();
45 
46  Buffer& getBuffer();
47  virtual IStreamRef createStream() = 0;
48 
49  protected:
50  DataSource( const fs::path &aFilePath, const Url &aUrl )
51  : mFilePath( aFilePath ), mUrl( aUrl )
52  {}
53  virtual ~DataSource() {}
54 
55  virtual void createBuffer() = 0;
56 
57  void setFilePathHint( const fs::path &aFilePathHint );
58 
60  fs::path mFilePath;
61  fs::path mFilePathHint;
63 };
64 
65 
66 typedef std::shared_ptr<class DataSourcePath> DataSourcePathRef;
67 
68 class DataSourcePath : public DataSource {
69  public:
70  static DataSourcePathRef create( const fs::path &path );
71 
72  virtual bool isFilePath() { return true; }
73  virtual bool isUrl() { return false; }
74 
75  virtual IStreamRef createStream();
76 
77  protected:
78  explicit DataSourcePath( const fs::path &path );
79 
80  virtual void createBuffer();
81 
83 };
84 
85 DataSourceRef loadFile( const fs::path &path );
86 
87 #if !defined( CINDER_WINRT )
88 typedef std::shared_ptr<class DataSourceUrl> DataSourceUrlRef;
89 
90 class DataSourceUrl : public DataSource {
91  public:
92  static DataSourceUrlRef create( const Url &Url, const UrlOptions &options = UrlOptions() );
93 
94  virtual bool isFilePath() { return false; }
95  virtual bool isUrl() { return true; }
96 
97  virtual IStreamRef createStream();
98 
99  const UrlOptions& getOptions() const { return mOptions; }
100 
101  protected:
102  DataSourceUrl( const Url &Url, const UrlOptions &options );
103 
104  virtual void createBuffer();
105 
108 };
109 #endif // if !defined( CINDER_WINRT )
110 
111 DataSourceRef loadUrl( const Url &Url, const UrlOptions &options = UrlOptions() );
112 inline DataSourceRef loadUrl( const std::string &urlString, const UrlOptions &options = UrlOptions() ) { return loadUrl( Url( urlString ), options ); }
113 
114 typedef std::shared_ptr<class DataSourceBuffer> DataSourceBufferRef;
115 
116 class DataSourceBuffer : public DataSource {
117  public:
118  static DataSourceBufferRef create( Buffer buffer, const fs::path &filePathHint = "" );
119 
120  virtual bool isFilePath() { return false; }
121  virtual bool isUrl() { return false; }
122 
123  virtual IStreamRef createStream();
124 
125  protected:
126  DataSourceBuffer( Buffer aBuffer );
127 
128  virtual void createBuffer();
129 
131 };
132 
133 } // namespace cinder
virtual bool isFilePath()
Definition: DataSource.h:94
Definition: DataSource.h:37
virtual void createBuffer()
Definition: DataSource.cpp:136
std::shared_ptr< class DataSourcePath > DataSourcePathRef
Definition: DataSource.h:66
Buffer mBuffer
Definition: DataSource.h:59
virtual void createBuffer()
Definition: DataSource.cpp:104
std::shared_ptr< class IStreamFile > IStreamFileRef
Definition: Stream.h:153
const fs::path & getFilePathHint()
Definition: DataSource.cpp:46
GLsizei const GLchar ** string
Definition: GLee.h:2427
DataSourceRef loadFile(const fs::path &path)
Definition: DataSource.cpp:85
fs::path mFilePathHint
Definition: DataSource.h:61
std::shared_ptr< class DataSourceUrl > DataSourceUrlRef
Definition: DataSource.h:88
static DataSourceUrlRef create(const Url &Url, const UrlOptions &options=UrlOptions())
Definition: DataSource.cpp:93
UrlOptions mOptions
Definition: DataSource.h:106
static DataSourceBufferRef create(Buffer buffer, const fs::path &filePathHint="")
defined( CINDER_WINRT )
Definition: DataSource.cpp:123
virtual IStreamRef createStream()
Definition: DataSource.cpp:141
virtual bool isUrl()
Definition: DataSource.h:73
virtual ~DataSource()
Definition: DataSource.h:53
DataSource(const fs::path &aFilePath, const Url &aUrl)
Definition: DataSource.h:50
virtual bool isUrl()=0
virtual bool isFilePath()=0
const UrlOptions & getOptions() const
Definition: DataSource.h:99
DataSourceBuffer(Buffer aBuffer)
Definition: DataSource.cpp:130
void setFilePathHint(const fs::path &aFilePathHint)
Definition: DataSource.cpp:31
Definition: Buffer.h:31
IStreamFileRef mStream
Definition: DataSource.h:82
std::shared_ptr< IStreamCinder > IStreamRef
Definition: Stream.h:142
virtual bool isFilePath()
Definition: DataSource.h:120
std::shared_ptr< class IStreamUrl > IStreamUrlRef
A pointer to an instance of an IStreamUrl. Can be created using IStreamUrl::createRef() ...
Definition: Url.h:114
virtual IStreamRef createStream()
Definition: DataSource.cpp:80
GLuint buffer
Definition: GLee.h:2065
std::shared_ptr< class DataSourceBuffer > DataSourceBufferRef
Definition: DataSource.h:114
virtual bool isUrl()
Definition: DataSource.h:121
virtual void createBuffer()=0
DataSourcePath(const fs::path &path)
Definition: DataSource.cpp:65
virtual bool isFilePath()
Definition: DataSource.h:72
const fs::path & getFilePath()
Definition: DataSource.cpp:36
static DataSourcePathRef create(const fs::path &path)
Definition: DataSource.cpp:60
IStreamUrlRef mStream
Definition: DataSource.h:107
virtual void createBuffer()
Definition: DataSource.cpp:71
virtual bool isUrl()
Definition: DataSource.h:95
Definition: DataSource.h:68
std::shared_ptr< class IStreamMem > IStreamMemRef
Definition: Stream.h:251
Buffer & getBuffer()
Definition: DataSource.cpp:51
IStreamMemRef mStream
Definition: DataSource.h:130
virtual IStreamRef createStream()=0
virtual IStreamRef createStream()
Definition: DataSource.cpp:110
DataSourceUrl(const Url &Url, const UrlOptions &options)
Definition: DataSource.cpp:98
Options for loadUrl() to dictate caching and timeout behavior.
Definition: Url.h:64
Definition: DataSource.h:116
Url mUrl
Definition: DataSource.h:62
std::shared_ptr< class DataSource > DataSourceRef
Definition: DataSource.h:35
Definition: DataSource.h:90
const Url & getUrl()
Definition: DataSource.cpp:41
fs::path mFilePath
Definition: DataSource.h:60
DataSourceRef loadUrl(const Url &Url, const UrlOptions &options=UrlOptions())
Definition: DataSource.cpp:115
Definition: Url.h:31