In this part, we discuss the core library design of SeqAn. We call it core design, because it answers very basic questions like: What are the strategies for organizing the functionality in the library? What is the general form of classes and functions? What language features are applied, and how are they used? The core design does not specify what classes and functions should be implemented in the library. This detailed design will be the topic of Part II, in which we will give a complete overview of the contents of SeqAn.
Although the core design is not directly connected with the actual contents of the library, it is influenced by the kind of functionality the library offers. For example we observe that sequence analysis relies on rather simple but generic data structures like sequences (Chapter 7), alignments (Chapter 8), string indices (Chapter 11), and graphs (Chapter 12) which makes it amenable to the generic programming paradigm, whereas libraries consisting of less generic but very complex data structures would probably be better implemented in a more object oriented way.