X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..8758875e0b001444cb677906e68912cb455ab275:/include/wx/archive.h diff --git a/include/wx/archive.h b/include/wx/archive.h index 31f6b921b1..67419a91fc 100644 --- a/include/wx/archive.h +++ b/include/wx/archive.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: archive.h +// Name: wx/archive.h // Purpose: Streams for archive formats // Author: Mike Wetherell // RCS-ID: $Id$ @@ -55,7 +55,7 @@ public: virtual void SetIsReadOnly(bool isReadOnly = true) = 0; virtual void SetName(const wxString& name, wxPathFormat format = wxPATH_NATIVE) = 0; - + wxArchiveEntry *Clone() const { return DoClone(); } void SetNotifier(wxArchiveNotifier& notifier); @@ -94,16 +94,17 @@ public: typedef wxArchiveEntry entry_type; virtual ~wxArchiveInputStream() { } - + virtual bool OpenEntry(wxArchiveEntry& entry) = 0; virtual bool CloseEntry() = 0; wxArchiveEntry *GetNextEntry() { return DoGetNextEntry(); } virtual char Peek() { return wxInputStream::Peek(); } - + protected: wxArchiveInputStream(wxInputStream& stream, wxMBConv& conv); + wxArchiveInputStream(wxInputStream *stream, wxMBConv& conv); virtual wxArchiveEntry *DoGetNextEntry() = 0; @@ -122,7 +123,7 @@ private: // // Only one entry can be open for output at a time; another call to // PutNextEntry closes the current entry and begins the next. -// +// // The overload 'bool PutNextEntry(wxArchiveEntry *entry)' takes ownership // of the entry object. @@ -149,6 +150,7 @@ public: protected: wxArchiveOutputStream(wxOutputStream& stream, wxMBConv& conv); + wxArchiveOutputStream(wxOutputStream *stream, wxMBConv& conv); wxMBConv& GetConv() const { return m_conv; } @@ -205,7 +207,7 @@ public: if (m_rep) m_rep->AddRef(); } - + ~wxArchiveIterator() { if (m_rep) m_rep->UnRef(); @@ -253,13 +255,13 @@ private: typename Arc::entry_type* m_entry; T m_value; int m_ref; - + public: Rep(Arc& arc, typename Arc::entry_type* entry) : m_arc(arc), m_entry(entry), m_value(), m_ref(1) { } ~Rep() { delete m_entry; } - + void AddRef() { m_ref++; } @@ -276,7 +278,7 @@ private: return NULL; } if (m_ref > 1) { - m_ref--; + m_ref--; return new Rep(m_arc, entry); } delete m_entry; @@ -308,7 +310,9 @@ typedef wxArchiveIterator<wxArchiveInputStream, // A wxArchiveClassFactory instance for a particular archive type allows // the creation of the other classes that may be needed. -class WXDLLIMPEXP_BASE wxArchiveClassFactory : public wxObject +void WXDLLIMPEXP_BASE wxUseArchiveClasses(); + +class WXDLLIMPEXP_BASE wxArchiveClassFactory : public wxFilterClassFactoryBase { public: typedef wxArchiveEntry entry_type; @@ -328,13 +332,30 @@ public: { return DoNewStream(stream); } wxArchiveOutputStream *NewStream(wxOutputStream& stream) const { return DoNewStream(stream); } + wxArchiveInputStream *NewStream(wxInputStream *stream) const + { return DoNewStream(stream); } + wxArchiveOutputStream *NewStream(wxOutputStream *stream) const + { return DoNewStream(stream); } virtual wxString GetInternalName( const wxString& name, wxPathFormat format = wxPATH_NATIVE) const = 0; + // FIXME-UTF8: remove these from this file, they are used for ANSI + // build only void SetConv(wxMBConv& conv) { m_pConv = &conv; } - wxMBConv& GetConv() const { return *m_pConv; } + wxMBConv& GetConv() const + { if (m_pConv) return *m_pConv; else return wxConvLocal; } + + static const wxArchiveClassFactory *Find(const wxString& protocol, + wxStreamProtocolType type + = wxSTREAM_PROTOCOL); + + static const wxArchiveClassFactory *GetFirst(); + const wxArchiveClassFactory *GetNext() const { return m_next; } + + void PushFront() { Remove(); m_next = sm_first; sm_first = this; } + void Remove(); protected: // old compilers don't support covarient returns, so 'Do' methods are @@ -342,13 +363,17 @@ protected: virtual wxArchiveEntry *DoNewEntry() const = 0; virtual wxArchiveInputStream *DoNewStream(wxInputStream& stream) const = 0; virtual wxArchiveOutputStream *DoNewStream(wxOutputStream& stream) const = 0; + virtual wxArchiveInputStream *DoNewStream(wxInputStream *stream) const = 0; + virtual wxArchiveOutputStream *DoNewStream(wxOutputStream *stream) const = 0; - wxArchiveClassFactory() : m_pConv(&wxConvLocal) { } + wxArchiveClassFactory() : m_pConv(NULL), m_next(this) { } wxArchiveClassFactory& operator=(const wxArchiveClassFactory& WXUNUSED(f)) { return *this; } private: wxMBConv *m_pConv; + static wxArchiveClassFactory *sm_first; + wxArchiveClassFactory *m_next; DECLARE_ABSTRACT_CLASS(wxArchiveClassFactory) };