23 static const char* ISTREAM_BUFFER_KW =
"ossim.stream.factory.registry.istream.buffer";
24 static ossimTrace traceDebug(
"ossimStreamFactoryRegistry:debug");
25 static std::mutex m_instanceMutex;
41 m_instanceMutex.lock();
46 m_instanceMutex.unlock();
47 m_instance->loadPreferences();
51 m_instanceMutex.unlock();
62 <<
"ossim::StreamFactoryRegistry::loadPreferences: ....... entered!\n";
64 std::vector<ossimString> sortedList;
69 m_bufferInfoList.resize(sortedList.size());
73 m_bufferInfoList.clear();
76 for(std::vector<ossimString>::const_iterator iter = sortedList.begin();
77 iter!=sortedList.end();
86 if(!bufferIStreamSize.
empty())
88 m_bufferInfoList[idx].m_size = bufferIStreamSize.
toUInt64();
90 if(!bufferIStreamEnabled.
empty())
92 m_bufferInfoList[idx].m_enabled = bufferIStreamEnabled.
toBool();
94 if(!bufferIStreamBlockEnabled.
empty())
96 m_bufferInfoList[idx].m_enableBlocked = bufferIStreamBlockEnabled.
toBool();
98 if(!bufferIStreamIncludePattern.
empty())
100 m_bufferInfoList[idx].m_pattern = bufferIStreamIncludePattern;
105 <<
"ossim::StreamFactoryRegistry adding BufferInfo: \n" 108 <<
"size: " << m_bufferInfoList[idx].m_size <<
"\n" 109 <<
"pattern: " << m_bufferInfoList[idx].m_pattern <<
"\n";
116 <<
"ossim::StreamFactoryRegistry::loadPreferences: ....... leaving!\n";
125 for(std::vector<BufferInfo>::const_iterator iter = m_bufferInfoList.begin();
126 iter != m_bufferInfoList.end();
131 m_patternMatcher.compile(iter->m_pattern);
132 if(m_patternMatcher.is_valid())
134 if(m_patternMatcher.find(connectionString.
c_str()))
149 const std::string& connectionString,
151 std::ios_base::openmode openMode)
const 153 std::shared_ptr<ossim::istream> result(0);
157 <<
"ossim::StreamFactoryRegistry::createIstream: ....... entered: "<< connectionString <<
"\n";
161 for(i = 0; (i < m_factoryList.size())&&(!result); ++i)
163 result = m_factoryList[i]->createIstream(connectionString, options, openMode);
168 if(getBufferInfo(bufferInfo, connectionString))
172 result = std::make_shared<ossim::BlockIStream>(result, bufferInfo.
m_size);
176 result = std::make_shared<ossimBufferedInputStream>(result, bufferInfo.
m_size);
185 <<
"ossim::StreamFactoryRegistry::createIstream: ....... leaving!\n";
194 std::ios_base::openmode )
const 196 std::shared_ptr<ossim::ostream> result(0);
203 std::ios_base::openmode )
const 205 std::shared_ptr<ossim::iostream> result(0);
211 bool continueFlag =
true;
212 return exists( connectionString, continueFlag );
216 bool& continueFlag)
const 221 <<
"ossim::StreamFactoryRegistry::exists: ....... entered: "<< connectionString <<
"\n";
224 for(
auto factory:m_factoryList)
227 result = factory->exists( connectionString, continueFlag );
228 if ( ( result ==
true ) || (continueFlag ==
false ) )
break;
234 <<
"ossim::StreamFactoryRegistry::createIstream: ....... leaving!\n";
241 std::vector<ossim::StreamFactoryBase*>::iterator iter = std::find(
242 m_factoryList.begin(), m_factoryList.end(), factory);
243 if(iter == m_factoryList.end())
245 m_factoryList.push_back(factory);
252 std::vector<ossim::StreamFactoryBase*>::iterator iter = std::find(
253 m_factoryList.begin(), m_factoryList.end(), factory);
254 if(iter != m_factoryList.end())
256 m_factoryList.erase( iter );
const ossimKeywordlist & preferencesKWL() const
Represents serializable keyword/value map.
static ossimString toString(bool aValue)
Numeric to string methods.
static StreamFactoryRegistry * instance()
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
Will try to creates an iostream interface to the connectionString passed in.
static StreamFactoryRegistry * m_instance
virtual ~StreamFactoryRegistry()
const char * findPreference(const char *key) const
bool exists(const std::string &connectionString) const
Methods to test if connection exists.
This is an internal class used to store the buffer information loaded from the preferences.
bool toBool() const
String to numeric methods.
void registerFactory(StreamFactoryBase *factory)
Registers a stream factory.
unsigned int ossim_uint32
static ossimPreferences * instance()
bool getBufferInfo(BufferInfo &bufferInfo, const ossimString &connectionString) const
static StreamFactory * instance()
This is a generic stream registry.
void getSortedList(std::vector< ossimString > &prefixValues, const ossimString &prefixKey) const
This return the sorted keys if you have a list.
ossim_uint64 toUInt64() const
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string's contents...
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
Will try to creates an ostream interface to the connectionString passed in.
void unregisterFactory(StreamFactoryBase *factory)
Removes a factory from the registry.
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
Will try to creates an istream interface to the connectionString passed in.
void loadPreferences()
This will load the buffer information from the preferences.
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)