OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimStreamFactory.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2005 Garrett Potts
3 //
4 // License: MIT
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author: Garrett Potts
9 //
10 //
11 //*******************************************************************
12 // $Id$
13 
14 #include <ossim/ossimConfig.h>
17 
18 #if OSSIM_HAS_LIBZ
20 #endif
21 
22 #include <fstream>
23 
24 #if defined(_WIN32)
25 # include <io.h> /* _access(...) */
26 #else
27 # include <unistd.h> /* access(...) */
28 #endif
29 
30 
32 
34 {
35 }
36 
38 {
39  if(!m_instance)
40  {
41  m_instance = new ossim::StreamFactory();
42  }
43  return m_instance;
44 }
45 
46 std::shared_ptr<ossim::istream> ossim::StreamFactory::createIstream(
47  const std::string& connectionString,
48  const ossimKeywordlist& /* options */,
49  std::ios_base::openmode mode ) const
50 {
51  std::shared_ptr<ossim::istream> result(0);
52  ossimFilename f = connectionString;
53  if ( f.exists() )
54  {
55  // there is a bug in gcc < 5.0 and we can't use constructors in the
56  // C++11 build. Will refactor to do a new ifstream then use open
57  //
58  std::shared_ptr<ossim::ifstream> testResult =
59  std::make_shared<ossim::ifstream>();
60  testResult->open(connectionString.c_str(), mode);
61  if(!testResult->is_open())
62  {
63  testResult.reset();
64  }
65 
66  result = testResult;
67  }
68 
69  return result;
70 }
71 
72 std::shared_ptr<ossim::ostream> ossim::StreamFactory::createOstream(
73  const std::string& connectionString,
74  const ossimKeywordlist& /* options */,
75  std::ios_base::openmode mode) const
76 {
77  std::shared_ptr<ossim::ostream> result(0);
78 
79  std::shared_ptr<ossim::ofstream> testResult =
80  std::make_shared<ossim::ofstream>();
81  testResult->open(connectionString.c_str(), mode);
82  if ( testResult->is_open() )
83  {
84  result = testResult;
85  }
86  else
87  {
88  testResult.reset();
89  }
90 
91  return result;
92 }
93 
94 std::shared_ptr<ossim::iostream> ossim::StreamFactory::createIOstream(
95  const std::string& /*connectionString*/,
96  const ossimKeywordlist& /* options */,
97  std::ios_base::openmode /*mode*/) const
98 {
99  return std::shared_ptr<ossim::iostream>(0);
100 }
101 
102 bool ossim::StreamFactory::exists(const std::string& connectionString, bool& continueFlag) const
103 {
104  bool result = false;
105  if ( connectionString.size() )
106  {
107  std::string file;
108  std::size_t pos = connectionString.find( "://" );
109  if ( pos != std::string::npos )
110  {
111  // is url:
112  ossimString protocol = connectionString.substr( 0, pos );
113  if ( (protocol.downcase() == "file") && ( connectionString.size() > pos+3) )
114  {
115  // Strip off "file://" for access(...) function:
116  file = connectionString.substr( pos+3 );
117  }
118  }
119  else // not a url
120  {
121  file = connectionString;
122  }
123 
124  if ( file.size() )
125  {
126  // Set continueFlag to false to stop downstream factory exists checks.
127  continueFlag = false;
128 #if defined(_WIN32)
129  result = (_access(file.c_str(), ossimFilename::OSSIM_EXIST) == 0);
130 #else
131  result = ((access(file.c_str(), ossimFilename::OSSIM_EXIST)) == 0);
132 #endif
133  }
134  }
135  return result;
136 }
137 
138 // Hidden from use:
140 {
141 }
142 
143 // Hidden from use:
145 {
146 }
Represents serializable keyword/value map.
virtual std::shared_ptr< ossim::ostream > createOstream(const std::string &connectionString, const ossimKeywordlist &options=ossimKeywordlist(), std::ios_base::openmode mode=std::ios_base::out|std::ios_base::binary) const
virtual std::shared_ptr< ossim::iostream > createIOstream(const std::string &connectionString, const ossimKeywordlist &options=ossimKeywordlist(), std::ios_base::openmode mode=std::ios_base::in|std::ios_base::out|std::ios_base::binary) const
bool exists() const
static ossimString downcase(const ossimString &aString)
Definition: ossimString.cpp:48
static StreamFactory * m_instance
static StreamFactory * instance()
virtual std::shared_ptr< ossim::istream > createIstream(const std::string &connectionString, const ossimKeywordlist &options=ossimKeywordlist(), std::ios_base::openmode mode=std::ios_base::in|std::ios_base::binary) const
virtual bool exists(const std::string &connectionString, bool &continueFlag) const
Methods to test if connection exists.
std::string substr(std::string::size_type pos=0, std::string::size_type n=std::string::npos) const
Equivalent to basic_string(*this, pos, n).
Definition: ossimString.h:910