DIRECTORY RedBlackTree, Rope, KeyNoteTokenFreqPerFileTable; KeyNoteTokenFreqPerFileTableImpl: CEDAR PROGRAM IMPORTS RedBlackTree, Rope EXPORTS KeyNoteTokenFreqPerFileTable = { ROPE: TYPE = Rope.ROPE; Compare: RedBlackTree.Compare = { RETURN [ Rope.Compare[s1: NARROW[k, ROPE], s2: NARROW[data, KeyNoteTokenFreqPerFileTable.UserData].token, case: FALSE]]; }; GetKey: RedBlackTree.GetKey = { RETURN [NARROW[data, KeyNoteTokenFreqPerFileTable.UserData].token]; }; Create: PUBLIC PROCEDURE [] RETURNS [table: KeyNoteTokenFreqPerFileTable.Table] = { table _ RedBlackTree.Create[getKey: GetKey, compare: Compare] }; DestroyTable: PUBLIC PROCEDURE [table: KeyNoteTokenFreqPerFileTable.Table] = { RedBlackTree.DestroyTable[self: table]; }; InsertAndBumpFrequncy: PUBLIC PROCEDURE [table: KeyNoteTokenFreqPerFileTable.Table, tokenName: ROPE] = { node: KeyNoteTokenFreqPerFileTable.Node _ RedBlackTree.LookupNode[self: table, lookupKey: tokenName]; IF node=NIL THEN { dataToInsert: KeyNoteTokenFreqPerFileTable.UserData _ NEW[KeyNoteTokenFreqPerFileTable.UserDataObject _ [token: tokenName, frequency: 1]]; RedBlackTree.Insert[self: table, dataToInsert: dataToInsert, insertKey: tokenName] } ELSE { WITH node.data SELECT FROM n: KeyNoteTokenFreqPerFileTable.UserData => { n.frequency _ n.frequency +1; }; ENDCASE => NULL; } }; EnumerateDecreasing: PUBLIC PROCEDURE [table: KeyNoteTokenFreqPerFileTable.Table, procToApply: KeyNoteTokenFreqPerFileTable.EachNode] = { RedBlackTree.EnumerateDecreasing[self: table, procToApply: procToApply]; }; LookupNextLarger: PUBLIC PROC [self: KeyNoteTokenFreqPerFileTable.Table, tokenName: ROPE] RETURNS [data: KeyNoteTokenFreqPerFileTable.UserData] = { data _ NARROW[RedBlackTree.LookupNextLarger[self: self, lookupKey: tokenName]]; }; Lookup: PUBLIC PROC [self: KeyNoteTokenFreqPerFileTable.Table, tokenName: ROPE] RETURNS [data: KeyNoteTokenFreqPerFileTable.UserData] = { data _ NARROW[RedBlackTree.Lookup[self: self, lookupKey: tokenName]]; }; }. File: KeyNoteTokenFreqPerFileTableImpl.mesa Copyright Σ 1985, 1987 by Xerox Corporation. All rights reserved. Jack Kent January 14, 1988 5:12:04 pm PST Contents: Implementation of KeyNoteTokenFreqPerFileTable types procedures if node not nil then must create it. Κ˜˜šΟnœ'™+JšœB™BIcodešœ)™)—J™Jšœ0™8J˜šΟk ˜ Jšœ ˜ J˜Jšœ˜J˜—š œžœž˜/Jšžœ˜Jšžœ"˜)J˜J˜Jšžœžœžœ˜J˜—J˜J™J˜šœ˜!Jš žœžœžœžœ;žœ˜xJ˜J˜—šœ˜ Jšžœžœ5˜CJ˜—J˜™ J˜—šœžœž œžœ0˜TJ•StartOfExpansion@[getKey: RedBlackTree.GetKey, compare: RedBlackTree.Compare]šœ=˜=J˜J˜—š œžœž œ0˜NJšœ'˜'J˜J˜—šœžœž œ8žœ˜hJ–;[self: RedBlackTree.Table, lookupKey: RedBlackTree.Key]šœf˜fJ™$šžœžœžœ˜Jšœ6žœQ˜ŠJ–b[self: RedBlackTree.Table, dataToInsert: RedBlackTree.UserData, insertKey: RedBlackTree.Key]šœR˜RJ˜—šžœ˜šžœ žœžœ˜šœ-˜-Jšœ˜J˜—Jšž˜—J˜—J˜J˜—šœžœž œd˜‰J–B[self: RedBlackTree.Table, procToApply: RedBlackTree.EachNode]šœH˜HJ˜J˜—š œžœžœ7žœžœ2˜”JšœžœB˜OJ˜—J˜š œžœžœ7žœžœ2˜ŠJšœžœ8˜EJ˜—˜J˜—˜J˜J˜J˜—™J˜J˜—˜J˜J˜—J˜—…—ά „