1 Introduction
1.1 Literate Programs
1.2 Programming Style
1.3 Efficiency
Further Reading
Exercises
2 Interfaces and Implementations
2.1 Interfaces
2.2 Implementations
2.3 Abstract Data Types
2.4 Client Responsibilities
2.5 Efficiency
Further Reading
Exercises
3 Atoms
3.1 Interface
3.2 Implementation
Further Reading
Exercises
4 Exceptions and Assertions
4.1 Interface
4.2 Implementation
4.3 Assertions
Further Reading
Exercises
5 Memory Management
5.1 Interface
5.2 Production Implementation
5.3 Checking Implementation
Further Reading
Exercises
6 More Memory Management
6.1 Interface
6.2 Implementation
Further Reading
Exercises
7 Lists
7.1 Interface
7.2 Implementation
Further Reading
Exercises
8 Tables
8.1 Interface
8.2 Example: Word Frequencies
8.3 Implementation
Further Reading
Exercises
9 Sets
9.1 Interface
9.2 Example: Cross-Reference Listings
9.3 Implementation
9.3.1 Member Operations
9.3.2 Set Operations
Further Reading
Exercises
10 Dynamic Arrays
10.1 Interfaces
10.2 Implementation
Further Reading
Exercises
11 Sequences
11.1 Interface
11.2 Implementation
Further Reading
Exercises
12 Rings
12.1 Interface
12.2 Implementation
Further Reading
Exercises
13 Bit Vectors
13.1 Interface
13.2 Implementation
13.2.1 Member Operations
13.2.2 Comparisons
13.2.3 Set Operations
Further Reading
Exercises
14 Formatting
14.1 Interface
14.1.1 Formatting Functions
14.1.2 Conversion Functions
14.2 Implementation
14.2.1 Formatting Functions
14.2.2 Conversion Functions
Further Reading
Exercises
15 Low-Level Strings
15.1 Interface
15.2 Example: Printing Identifiers
15.3 Implementation
15.3.1 String Operations
15.3.2 Analyzing Strings
15.3.3 Conversion Functions
Further Reading
Exercises
16 High.Level Strings
16.1 Interface
16.2 Implementation
16.2.1 String Operations
16.2.2 Memory Management
16.2.3 Analyzing Strings
16.2.4 Conversion Functions
Further Reading
Exercises
17 Extended-Precision Arithmetic
17.1 Interface
17.2 Implementation
17.2.1 Addition and Subtraction
17.2.2 Multiplication
17.2.3 Division and Comparison
17.2.4 Shifting
17.2.5 String Conversions
Further Reading
Exercises
18 Arbitrary-Precision Arithmetic
18.1 Interface
18.2 Example: A Calculator
18.3 Implementation
18.3.1 Negation and Multiplication
18.3.2 Addition and Subtraction
18.3.3 Division
18.3.4 Exponentiation
18.3.5 Comparisons
18.3.6 Convenience Functions
18.3.7 Shifting
18.3.8 String and Integer Conversion
Further Reading
Exercises
19 Multiple-Precision Arithmetic
19.1 Interface
19.2 Example: Another Calculator
19.3 Implementation
19.3.1 Conversions
19.3.2 Unsigned Arithmetic
19.3.3 Signed Arithmetic
19.3.4 Convenience Functions
19.3.5 Comparisons and Logical Operations
19.3.6 String Conversions
Further Reading
Exercises
20 Threads
20.1 Interfaces
20.1.1 Threads
20.1.2 General Semaphores
20.1.3 Synchronous Communication Channels
20.2 Examples
20.2.1 Sorting Concurrently
20.2.2 Critical Regions
20.2.3 Generating Primes
20.3 Implementations
20.3.1 Synchronous Communication Channels
20.3.2 Threads
20.3.3 Thread Creation and Context-Switching
20.3.4 Preemption
20.3.5 General Semaphores
20.3.6 Context-Switching on the MIPS and ALPHA
Further Reading
Exercises
Interface Summary
Bibliography
Index