This machine mirrors various open-source projects.
20 Gbit/s uplink.
If there are any issues or you want another project mirrored, please contact
mirror-service -=AT=- netcologne DOT de !
00001 /*===========================================================================*/ 00002 /* 00003 * This file is part of libogg++ - a c++ library for the Ogg transport format 00004 * 00005 * Copyright (C) 2006, 2007, 2008 Elaine Tsiang YueLien 00006 * 00007 * libogg++ is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the 00019 * Free Software Foundation, Inc. 00020 * 51 Franklin Street, Fifth Floor 00021 * Boston, MA 02110-1301, USA 00022 * 00023 *===========================================================================*/ 00028 /*===========================================================================*/ 00029 #ifndef LogicalToApplicationInterface 00030 #define LogicalToApplicationInterface 00031 00032 #ifdef __GNUG__ 00033 #pragma interface 00034 #endif 00035 00036 00037 namespace Ogg 00038 { 00039 class Logical; 00040 class Packet; 00041 } 00042 00043 #include <Ogg/Ogg.H> 00044 #include <Ogg/Transport.H> 00045 #include <Ogg/Exception.H> 00046 00047 namespace Ogg 00048 { 00050 00051 00058 class Packet 00059 { 00060 private: 00061 Packet(const Packet &); 00062 00063 Packet & 00064 operator =(const Packet &); 00065 00066 protected: 00067 Packet(){}; 00068 00069 public: 00070 void 00071 data(void * 00072 ,size_t 00073 ); 00074 00075 void * 00076 data(); 00077 00078 size_t 00079 size(); 00080 00081 PacketNo 00082 packetNo(); 00083 00084 }; 00085 00091 class Logical 00092 { 00093 private: 00094 void * impl_; 00095 00096 Logical(const Logical &); 00097 00098 Logical & 00099 operator =(const Logical &); 00100 00101 protected: 00103 Logical( 00104 bool dummy 00105 ) 00106 : impl_(0) 00107 {} 00108 00109 public: 00110 void * 00111 impl() 00112 { 00113 return(impl_); 00114 } 00115 00116 /*----- Exceptions thrown by a Logical thread ---------------------------------*/ 00117 00119 class SerialNotPositive : public Exception 00120 { 00121 public: 00122 SerialNotPositive( 00123 const long serialNo 00124 ) throw() 00125 : Exception("Serial no. ") 00126 { 00127 *this << serialNo << "is not positive" << std::endl; 00128 } 00129 00130 SerialNotPositive( 00131 const SerialNotPositive & ex 00132 ) throw() 00133 : Exception(ex) 00134 {} 00135 00136 ~SerialNotPositive() throw() 00137 {} 00138 } 00139 ; 00140 00142 class WriterAlreadyExists : public Exception 00143 { 00144 public: 00145 WriterAlreadyExists( 00146 const long serialNo 00147 ) throw() 00148 : Exception("Writer for this Logical already exists,") 00149 { 00150 *this << " serial no. = " << serialNo << std::endl; 00151 } 00152 00153 WriterAlreadyExists( 00154 const WriterAlreadyExists & ex 00155 ) throw() 00156 : Exception(ex) 00157 {} 00158 00159 ~WriterAlreadyExists() throw() 00160 {} 00161 } 00162 ; 00163 00165 class NotForWriting : public Exception 00166 { 00167 public: 00168 NotForWriting( 00169 const long serialNo 00170 ) throw() 00171 : Exception("This Logical not for writing") 00172 { 00173 *this << " serial no. = " << serialNo << std::endl; 00174 } 00175 00176 NotForWriting( 00177 const NotForWriting & ex 00178 ) throw() 00179 : Exception(ex) 00180 {} 00181 00182 ~NotForWriting() throw() 00183 {} 00184 } 00185 ; 00186 00188 class ReaderAlreadyExists : public Exception 00189 { 00190 public: 00191 ReaderAlreadyExists( 00192 const long serialNo 00193 ) throw() 00194 : Exception("Reader for this Logical already exists,") 00195 { 00196 *this << " serial no. = " << serialNo << std::endl; 00197 } 00198 00199 ReaderAlreadyExists( 00200 const ReaderAlreadyExists & ex 00201 ) throw() 00202 : Exception(ex) 00203 {} 00204 00205 ~ReaderAlreadyExists() throw() 00206 {} 00207 } 00208 ; 00209 00211 class NotForReading : public Exception 00212 { 00213 public: 00214 NotForReading( 00215 const long serialNo 00216 ) throw() 00217 : Exception("This Logical not for reading,") 00218 { 00219 *this << " serial no. = " << serialNo << std::endl; 00220 } 00221 00222 NotForReading( 00223 const NotForReading & ex 00224 ) throw() 00225 : Exception(ex) 00226 {} 00227 00228 ~NotForReading() throw() 00229 {} 00230 } 00231 ; 00232 00234 class MuxTooLate : public Exception 00235 { 00236 public: 00237 MuxTooLate( 00238 const long serialNo 00239 ) throw() 00240 : Exception("This Logical stream comes in too late - synchronize better,") 00241 { 00242 *this << " serial no. = " << serialNo << std::endl; 00243 } 00244 00245 MuxTooLate( 00246 const MuxTooLate & ex 00247 ) throw() 00248 : Exception(ex) 00249 {} 00250 00251 ~MuxTooLate() throw() 00252 {} 00253 } 00254 ; 00255 00257 class SerialNoAlreadyUsed : public Exception 00258 { 00259 public: 00260 SerialNoAlreadyUsed( 00261 const long serialNo 00262 ) throw() 00263 : Exception("This serial no. has been taken already,") 00264 { 00265 *this << " serial no. = " << serialNo << std::endl; 00266 } 00267 00268 SerialNoAlreadyUsed( 00269 const SerialNoAlreadyUsed & ex 00270 ) throw() 00271 : Exception(ex) 00272 {} 00273 00274 ~SerialNoAlreadyUsed() throw() 00275 {} 00276 } 00277 ; 00278 00280 class StreamAlreadyClaimed : public Exception 00281 { 00282 public: 00283 StreamAlreadyClaimed( 00284 const long serialNo 00285 ) throw() 00286 : Exception("Stream already has been claimed,") 00287 { 00288 *this << " serial no. = " << serialNo << std::endl; 00289 } 00290 00291 StreamAlreadyClaimed( 00292 const StreamAlreadyClaimed & ex 00293 ) throw() 00294 : Exception(ex) 00295 {} 00296 00297 ~StreamAlreadyClaimed() throw() 00298 {} 00299 } 00300 ; 00301 00303 class NoSuchStream : public Exception 00304 { 00305 public: 00306 NoSuchStream( 00307 const long serialNo 00308 ) throw() 00309 : Exception("No stream found,") 00310 { 00311 *this << " serial no. = " << serialNo << std::endl; 00312 } 00313 00314 NoSuchStream( 00315 const NoSuchStream & ex 00316 ) throw() 00317 : Exception(ex) 00318 {} 00319 00320 ~NoSuchStream() throw() 00321 {} 00322 } 00323 ; 00324 00326 class FailedToSelectStream : public Exception 00327 { 00328 public: 00329 FailedToSelectStream( 00330 const long serialNo 00331 ) throw() 00332 : Exception("Failed to find a stream with ") 00333 { 00334 *this << " serial no. = " << serialNo << std::endl; 00335 } 00336 00337 FailedToSelectStream( 00338 const FailedToSelectStream & ex 00339 ) throw() 00340 : Exception(ex) 00341 {} 00342 00343 ~FailedToSelectStream() throw() 00344 {} 00345 } 00346 ; 00347 00349 class SeekInternalError : public Exception 00350 { 00351 public: 00352 SeekInternalError( 00353 const long serialNo 00354 ) throw() 00355 : Exception("Please let developers know this happened.") 00356 { 00357 *this << " serial no. = " << serialNo << std::endl; 00358 } 00359 00360 SeekInternalError( 00361 const SeekInternalError & ex 00362 ) throw() 00363 : Exception(ex) 00364 {} 00365 00366 ~SeekInternalError() throw() 00367 {} 00368 } 00369 ; 00370 00372 class PageReaderTooLate : public Exception 00373 { 00374 public: 00375 PageReaderTooLate( 00376 const long serialNo 00377 ) throw() 00378 : Exception("Request for PageReader must precede that for Reader.") 00379 { 00380 *this << " serial no. = " << serialNo << std::endl; 00381 } 00382 00383 PageReaderTooLate( 00384 const PageReaderTooLate & ex 00385 ) throw() 00386 : Exception(ex) 00387 {} 00388 00389 ~PageReaderTooLate() throw() 00390 {} 00391 } 00392 ; 00393 00395 class ReaderTooLate : public Exception 00396 { 00397 public: 00398 ReaderTooLate( 00399 const long serialNo 00400 ) throw() 00401 : Exception("Logical::reader() must precede PageReader::get()") 00402 { 00403 *this << " serial no. = " << serialNo << std::endl; 00404 } 00405 00406 ReaderTooLate( 00407 const ReaderTooLate & ex 00408 ) throw() 00409 : Exception(ex) 00410 {} 00411 00412 ~ReaderTooLate() throw() 00413 {} 00414 } 00415 ; 00416 00417 /*- end Exceptions thrown by a Logical thread ---------------------------------*/ 00418 00420 Logical( 00421 Transport & transport 00422 ,long serialNo 00423 ); 00424 00426 Logical( 00427 Transport & transport 00428 ); 00429 00431 Logical( 00432 long serialNo 00433 ,Transport& transport 00434 ); 00435 00436 00440 virtual 00441 ~Logical(); 00442 00449 virtual 00450 bool 00451 selectCallback( 00452 Packet & firstPacket 00453 ) 00454 { 00455 return(true); 00456 } 00457 00463 long 00464 serialNo() const; 00465 00467 Transport & 00468 transport() const; 00469 00476 class Writer 00477 { 00478 private: 00479 Writer(const Writer &); 00480 00481 Writer & 00482 operator =(const Writer &); 00483 00484 protected: 00485 Writer(){}; 00486 00487 public: 00495 ~Writer(); 00496 00498 size_t 00499 dataSize() const; 00500 00505 void 00506 dataSize(size_t); 00507 00509 void 00510 flush(); 00511 00516 void 00517 beginData(); 00518 00523 void 00524 granulePosition( 00525 Position 00526 ); 00527 00529 Position 00530 granulePosition() const; 00531 00533 size_t 00534 pageSize() const; 00535 00540 void 00541 pageSize( 00542 size_t 00543 ); 00544 00546 Writer & 00547 operator ++(); 00548 00550 Packet * 00551 operator->() const throw(); 00552 00554 Packet * 00555 packet() const throw() 00556 { 00557 return(operator->()); 00558 } 00559 }; 00560 00567 class Reader 00568 { 00569 private: 00570 Reader(const Reader &); 00571 00572 Reader & 00573 operator =(const Reader &); 00574 00575 protected: 00576 Reader(){}; 00577 00578 public: 00583 ~Reader(); 00584 00586 Reader & 00587 operator ++(); 00588 00593 Reader & 00594 operator +=(PacketNo packets); 00595 00600 Reader & 00601 operator =(Position position); 00602 00603 bool 00604 ending() const; 00605 00606 Error 00607 transportError() 00608 const; 00609 00610 Position 00611 granulePosition() 00612 const; 00613 00615 Packet * 00616 operator->() const throw(); 00617 00619 Packet * 00620 packet() const throw() 00621 { 00622 return(operator->()); 00623 } 00624 }; 00625 00633 class PageWriter 00634 { 00635 private: 00636 PageWriter(const PageWriter &); 00637 00638 PageWriter & 00639 operator =(const PageWriter &); 00640 00641 protected: 00642 PageWriter(){}; 00643 00644 public: 00652 ~PageWriter(); 00653 00662 bool 00663 put(Page &); 00664 00667 void 00668 doPut(Page &); 00669 00670 }; 00671 00681 class PageReader 00682 { 00683 private: 00684 PageReader(const PageReader &); 00685 00686 PageReader & 00687 operator =(const PageReader &); 00688 00689 protected: 00690 PageReader(){}; 00691 00692 public: 00697 ~PageReader(); 00698 00705 Page * 00706 get(); 00707 00711 Page & 00712 doGet(); 00713 00714 }; 00715 00720 Writer & 00721 writer(); 00722 00727 PageWriter & 00728 pageWriter(); 00729 00730 00744 PageReader & 00745 pageReader(); 00746 00751 Reader & 00752 reader(); 00753 00754 }; 00756 }; 00757 #endif