001 /* 002 * cs101 producer/consumer (single word) buffer 003 * $Id: PNCBuffer.java,v 1.4 2003/09/23 14:41:25 gus Exp $ 004 * 005 * Developed for "Rethinking CS101", a project of Lynn Andrea Stein's AP Group. 006 * For more information, see <a href="http://www.ai.mit.edu/projects/cs101/">the 007 * CS101 homepage</a> or email <las@ai.mit.edu>. 008 * 009 * Copyright (C) 1996 Massachusetts Institute of Technology. 010 * Please do not redistribute without obtaining permission. 011 */ 012 013 package cs101.util.semaphore; 014 015 /** 016 * cs101.util.PNCBuffer implements a producer/consumer synchronized buffer. 017 * Interface is pncBuffer.putWord(String), pncBuffer.getNextWord(). 018 * <br> 019 * Copyright 1996 Massachusetts Institute of Technology 020 * 021 * @see cs101.util.semaphore.BS 022 * 023 * @author Lynn Andrea Stein, las@ai.mit.edu 024 * @version $Id: PNCBuffer.java,v 1.4 2003/09/23 14:41:25 gus Exp $ 025 * 026 */ 027 public final class PNCBuffer { 028 private String word = null; 029 private BS wordRead = new BS(true); 030 private BS wordWrite = new BS(false); 031 032 //putWord( String ) 033 /** 034 * (Safely) Puts a word into the PNCBuffer. 035 * 036 * @param newWord the word to be inserted. 037 * 038 * @see #getNextWord 039 * @see cs101.util.semaphore.BS 040 */ 041 public void putWord( String newWord ) { 042 this.wordWrite.request(); 043 this.word = newWord; 044 this.wordRead.release(); 045 } 046 047 //getNextWord() 048 /** 049 * (Safely) Consumes the word held in the PNCBuffer. 050 * 051 * @return the word. 052 * 053 * @see #putWord 054 * @see cs101.util.semaphore.BS 055 */ 056 public String getNextWord() { 057 this.wordRead.request(); 058 String nw = this.word; 059 this.wordWrite.release(); 060 return nw; 061 } 062 } 063 064 /* Comments: 065 * 066 * History: 067 * $Log: PNCBuffer.java,v $ 068 * Revision 1.4 2003/09/23 14:41:25 gus 069 * javadoc fix 070 * 071 * Revision 1.3 2002/11/25 15:37:53 gus 072 * fix typo in last vix 073 * 074 * Revision 1.2 2002/11/25 15:25:23 gus 075 * fix javadoc errors. 076 * 077 * Revision 1.1.1.1 2002/06/05 21:56:32 root 078 * CS101 comes to Olin finally. 079 * 080 * Revision 1.1 2000/04/24 22:17:22 nathanw 081 * Bulk reorganization 082 * 083 * Revision 1.2 1998/07/24 17:19:31 tparnell 084 * Placate new javadoc behavior 085 * 086 * Revision 1.1 1998/03/13 22:18:18 tparnell 087 * Import from server crash. I think the src and class files match up. 088 * 089 * Revision 1.3 1996/08/01 18:26:30 reuben 090 * More javadoc tweaking (hopefully the final pass) 091 * 092 * Revision 1.2 1996/07/30 17:26:00 reuben 093 * Added/corrected javadoc comments. 094 * 095 * Revision 1.1.1.1 1996/07/18 17:38:24 sit 096 * Import from /mit/6.096/share/classes after 6.80s session 097 * 098 * Revision 1.4 1996/06/19 23:03:02 las 099 * Oops. Renamed BS's methods to correspond with reality. 100 * 101 * 6-19-96 Documentation cleaned up by las@ai.mit.edu 102 * 6-18-96 Created by las@ai.mit.edu 103 * 104 */