kviewshell
DjVuPort.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #ifndef _DJVUPORT_H
00058 #define _DJVUPORT_H
00059 #ifdef HAVE_CONFIG_H
00060 #include "config.h"
00061 #endif
00062 #if NEED_GNUG_PRAGMAS
00063 # pragma interface
00064 #endif
00065
00066
00067 #include "GThreads.h"
00068 #include "GURL.h"
00069
00070 #ifdef HAVE_NAMESPACES
00071 namespace DJVU {
00072 # ifdef NOT_DEFINED // Just to fool emacs c++ mode
00073 }
00074 #endif
00075 #endif
00076
00077 class DataPool;
00078
00124
00125 class DjVuPort;
00126 class DjVuPortcaster;
00127 class DjVuFile;
00128
00141 class DjVuPort : public GPEnabled
00142 {
00143 public:
00144 DjVuPort();
00145 virtual ~DjVuPort();
00146 static void *operator new (size_t sz);
00147 static void operator delete(void *addr);
00148
00150 static DjVuPortcaster *get_portcaster(void);
00151
00154 DjVuPort(const DjVuPort & port);
00155
00158 DjVuPort & operator=(const DjVuPort & port);
00159
00168 virtual bool inherits(const GUTF8String &class_name) const;
00169
00176
00182 virtual GURL id_to_url(const DjVuPort * source, const GUTF8String &id);
00183
00188 virtual GP<DjVuFile> id_to_file(const DjVuPort * source, const GUTF8String &id);
00189
00198 virtual GP<DataPool> request_data(const DjVuPort * source, const GURL & url);
00199
00203 virtual bool notify_error(const DjVuPort * source, const GUTF8String &msg);
00204
00208 virtual bool notify_status(const DjVuPort * source, const GUTF8String &msg);
00209
00214 virtual void notify_redisplay(const class DjVuImage * source);
00215
00219 virtual void notify_relayout(const class DjVuImage * source);
00220
00222 virtual void notify_chunk_done(const DjVuPort * source, const GUTF8String &name);
00223
00235 virtual void notify_file_flags_changed(const class DjVuFile * source,
00236 long set_mask, long clr_mask);
00237
00245 virtual void notify_doc_flags_changed(const class DjVuDocument * source,
00246 long set_mask, long clr_mask);
00247
00252 virtual void notify_decode_progress(const DjVuPort * source, float done);
00253
00259 enum ErrorRecoveryAction {ABORT=0,SKIP_PAGES=1,SKIP_CHUNKS=2,KEEP_ALL=3 };
00261 public:
00262 class DjVuPortCorpse;
00263 private:
00264 static GCriticalSection * corpse_lock;
00265 static DjVuPortCorpse * corpse_head, * corpse_tail;
00266 static int corpse_num;
00267 };
00268
00276 class DjVuSimplePort : public DjVuPort
00277 {
00278 public:
00280 virtual bool inherits(const GUTF8String &class_name) const;
00281
00284 virtual GP<DataPool> request_data(const DjVuPort * source, const GURL & url);
00285
00287 virtual bool notify_error(const DjVuPort * source, const GUTF8String &msg);
00288
00290 virtual bool notify_status(const DjVuPort * source, const GUTF8String &msg);
00291 };
00292
00293
00301 class DjVuMemoryPort : public DjVuPort
00302 {
00303 public:
00305 virtual bool inherits(const GUTF8String &class_name) const;
00306
00310 virtual GP<DataPool> request_data(const DjVuPort * source, const GURL & url);
00311
00315 void add_data(const GURL & url, const GP<DataPool> & pool);
00316 private:
00317 GCriticalSection lock;
00318 GPMap<GURL, DataPool>map;
00319 };
00320
00321
00322
00356 class DjVuPortcaster
00357 {
00358 public:
00360 static DjVuPortcaster *get_portcaster(void)
00361 { return DjVuPort::get_portcaster(); } ;
00362
00364 DjVuPortcaster(void);
00365
00366 virtual ~DjVuPortcaster(void);
00367
00371 void del_port(const DjVuPort * port);
00372
00377 void add_route(const DjVuPort *src, DjVuPort *dst);
00378
00381 void del_route(const DjVuPort *src, DjVuPort *dst);
00382
00386 void copy_routes(DjVuPort *dst, const DjVuPort *src);
00387
00390 GP<DjVuPort> is_port_alive(DjVuPort *port);
00391
00399 void add_alias(const DjVuPort * port, const GUTF8String &alias);
00400
00402 static void clear_all_aliases(void);
00403
00405 void clear_aliases(const DjVuPort * port);
00406
00410 GP<DjVuPort> alias_to_port(const GUTF8String &name);
00411
00415 GPList<DjVuPort> prefix_to_ports(const GUTF8String &prefix);
00416
00420 virtual GURL id_to_url(const DjVuPort * source, const GUTF8String &id);
00421
00426 virtual GP<DjVuFile> id_to_file(const DjVuPort * source, const GUTF8String &id);
00427
00431 virtual GP<DataPool> request_data(const DjVuPort * source, const GURL & url);
00432
00436 virtual bool notify_error(const DjVuPort * source, const GUTF8String &msg);
00437
00441 virtual bool notify_status(const DjVuPort * source, const GUTF8String &msg);
00442
00446 virtual void notify_redisplay(const class DjVuImage * source);
00447
00451 virtual void notify_relayout(const class DjVuImage * source);
00452
00456 virtual void notify_chunk_done(const DjVuPort * source, const GUTF8String &name);
00457
00461 virtual void notify_file_flags_changed(const class DjVuFile * source,
00462 long set_mask, long clr_mask);
00463
00467 virtual void notify_doc_flags_changed(const class DjVuDocument * source,
00468 long set_mask, long clr_mask);
00469
00473 virtual void notify_decode_progress(const DjVuPort * source, float done);
00474
00475 private:
00476
00477 friend class DjVuPort;
00478 GCriticalSection map_lock;
00479 GMap<const void *, void *> route_map;
00480 GMap<const void *, void *> cont_map;
00481 GMap<GUTF8String, const void *> a2p_map;
00482 void add_to_closure(GMap<const void*, void*> & set,
00483 const DjVuPort *dst, int distance);
00484 void compute_closure(const DjVuPort *src, GPList<DjVuPort> &list,
00485 bool sorted=false);
00486 };
00487
00488
00489 inline bool
00490 DjVuPort::inherits(const GUTF8String &class_name) const
00491 {
00492 return (class_name == "DjVuPort");
00493 }
00494
00495 inline bool
00496 DjVuSimplePort::inherits(const GUTF8String &class_name) const
00497 {
00498 return
00499 (class_name == "DjVuSimplePort") || DjVuPort::inherits(class_name);
00500 }
00501
00502 inline bool
00503 DjVuMemoryPort::inherits(const GUTF8String &class_name) const
00504 {
00505 return
00506 (class_name == "DjVuMemoryPort") || DjVuPort::inherits(class_name);
00507 }
00508
00510
00511
00512 #ifdef HAVE_NAMESPACES
00513 }
00514 # ifndef NOT_USING_DJVU_NAMESPACE
00515 using namespace DJVU;
00516 # endif
00517 #endif
00518 #endif