DIRECTORY Complex; FFTSingle: CEDAR DEFINITIONS = { COMPLEX: TYPE ~ Complex.VEC; ComplexSeq: TYPE ~ REF ComplexSequence; ComplexSequence: TYPE ~ RECORD [ length: NAT, elts: SEQUENCE size: NAT OF COMPLEX]; NewComplexSeq: PROC [size: NAT] RETURNS [ComplexSeq]; CsAppend: PROC [cs: ComplexSeq, c: COMPLEX] RETURNS [ComplexSeq]; CsCopy: PROC [cs: ComplexSeq, start, size: INT] RETURNS [ComplexSeq]; DestructiveFft: PROC [cs: ComplexSeq, inv: BOOL] RETURNS [ComplexSeq]; DestructiveMap: PROC [ cs: ComplexSeq, proc: PROC [COMPLEX] RETURNS [COMPLEX]]; }. β FFTSingle.mesa Copyright Σ 1991, 1992 by Xerox Corporation. All rights reserved. Spreitze, January 25, 1991 8:49 am PST Actually, this interface does any DFT (Discrete Fourier Transform). "Single" appears in the name because single-precision floating-point is used. A mutable buffer of complex numbers. Only the first length are meaningful. Returns one with length=0. Allocates a new ComplexSeq if necessary. Returns a new ComplexSeq of given size. Result's length is MAX[0, cs.length-start]. new[i] = cs[i+start] for i in [0 .. new.length). No performance guarantee when length isn't a power of 2. Result may be different buffer from arg; arg may get trashed. Transform every meaningful element of the buffer by the given proc. Κ₯–(cedarcode) style•NewlineDelimiter ™code™Kšœ Οeœ7™BK™&—K˜KšΟk œ ˜K˜šΟn œžœž œ˜ K˜K™CK™M—K˜Kšžœžœ žœ˜K˜Kšœ žœžœ˜'šœžœžœ˜ Kšœžœ˜ Kš œžœžœžœžœ˜%Kšœ5œ™K—K˜šŸ œžœžœžœ˜5K™—K˜šŸœžœžœžœ˜AKšœ(™(—K˜šŸœžœžœžœ˜EKšœ'™'K™+Kšœ0™0—K˜šŸœžœžœžœ˜FK™8K™=—K˜šŸœžœ˜Kšœ˜Kš œžœžœžœžœ˜(K™C—K˜K˜—…—0·