@ -39,15 +39,19 @@ namespace rdr {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // itemSize bytes.  Returns the number of items in the buffer (up to a
 
 
					 
					 
					 
					    // itemSize bytes.  Returns the number of items in the buffer (up to a
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // maximum of nItems).  If wait is false, then instead of blocking to wait
 
 
					 
					 
					 
					    // maximum of nItems).  If wait is false, then instead of blocking to wait
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // for the bytes, zero is returned if the bytes are not immediately
 
 
					 
					 
					 
					    // for the bytes, zero is returned if the bytes are not immediately
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // available. 
 
					 
					 
					 
					    // available.  If itemSize or nItems is zero, check() will return zero. 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    inline  size_t  check ( size_t  itemSize ,  size_t  nItems = 1 ,  bool  wait = true ) 
 
					 
					 
					 
					    inline  size_t  check ( size_t  itemSize ,  size_t  nItems = 1 ,  bool  wait = true ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    { 
 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      size_t  nAvail ; 
 
					 
					 
					 
					      size_t  nAvail ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      if  ( itemSize  = =  0  | |  nItems  = =  0 ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        return  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  ( itemSize  >  ( size_t ) ( end  -  ptr ) ) 
 
					 
					 
					 
					      if  ( itemSize  >  ( size_t ) ( end  -  ptr ) ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  overrun ( itemSize ,  nItems ,  wait ) ; 
 
					 
					 
					 
					        return  overrun ( itemSize ,  nItems ,  wait ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      // itemSize cannot be zero at this point
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      nAvail  =  ( end  -  ptr )  /  itemSize ; 
 
					 
					 
					 
					      nAvail  =  ( end  -  ptr )  /  itemSize ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  ( nAvail  <  nItems ) 
 
					 
					 
					 
					      if  ( nAvail  <  nItems ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  nAvail ; 
 
					 
					 
					 
					        return  nAvail ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -58,8 +62,12 @@ namespace rdr {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // checkNoWait() tries to make sure that the given number of bytes can
 
 
					 
					 
					 
					    // checkNoWait() tries to make sure that the given number of bytes can
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // be read without blocking.  It returns true if this is the case, false
 
 
					 
					 
					 
					    // be read without blocking.  It returns true if this is the case, false
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // otherwise.  The length must be "small" (less than the buffer size).
 
 
					 
					 
					 
					    // otherwise.  The length must be "small" (less than the buffer size).
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // If length is zero, checkNoWait() will return true.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    inline  bool  checkNoWait ( size_t  length )  {  return  check ( length ,  1 ,  false ) ! = 0 ;  } 
 
					 
					 
					 
					    inline  bool  checkNoWait ( size_t  length ) 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      return  length  = =  0  | |  check ( length ,  1 ,  false )  >  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // readU/SN() methods read unsigned and signed N-bit integers.
 
 
					 
					 
					 
					    // readU/SN() methods read unsigned and signed N-bit integers.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -94,6 +102,7 @@ namespace rdr {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    } 
 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // readBytes() reads an exact number of bytes.
 
 
					 
					 
					 
					    // readBytes() reads an exact number of bytes.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // If length is zero, readBytes() will return immediately.
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    void  readBytes ( void *  data ,  size_t  length )  { 
 
					 
					 
					 
					    void  readBytes ( void *  data ,  size_t  length )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      while  ( length  >  0 )  { 
 
					 
					 
					 
					      while  ( length  >  0 )  {