seq-range-array.h revision 605eca549c08af753e05c25937bcccd66079c321
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen#ifndef SEQ_RANGE_ARRAY_H
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen#define SEQ_RANGE_ARRAY_H
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen
bdd36cfdba3ff66d25570a9ff568d69e1eb543cfTimo Sirainenstruct seq_range {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen uint32_t seq1, seq2;
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen};
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo SirainenARRAY_DEFINE_TYPE(seq_range, struct seq_range);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* Add sequrence to range. If the array isn't created yet, create it with
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen initial size of init_count. */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenvoid seq_range_array_add(ARRAY_TYPE(seq_range) *array, unsigned int init_count,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen uint32_t seq);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenvoid seq_range_array_add_range(ARRAY_TYPE(seq_range) *array,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen uint32_t seq1, uint32_t seq2);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* Remove given sequrence from range. Returns TRUE if it was found. */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenbool seq_range_array_remove(ARRAY_TYPE(seq_range) *array, uint32_t seq);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* Remove a sequence range. Returns number of sequences actually removed. */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenunsigned int seq_range_array_remove_range(ARRAY_TYPE(seq_range) *array,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen uint32_t seq1, uint32_t seq2);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenunsigned int seq_range_array_remove_seq_range(ARRAY_TYPE(seq_range) *dest,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen const ARRAY_TYPE(seq_range) *src);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* Remove sequences from dest that don't exist in src. */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenunsigned int
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenseq_range_array_remove_invert_range(ARRAY_TYPE(seq_range) *dest,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen const ARRAY_TYPE(seq_range) *src);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* Returns TRUE if sequence exists in the range. */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenbool seq_range_exists(const ARRAY_TYPE(seq_range) *array, uint32_t seq);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen
cb3ab2fd5668700a89b274a43595cfbfa1616e4bTimo Sirainen/* Invert the sequence range. For example 5:6 -> min_seq:4,7:max_seq. */
cb3ab2fd5668700a89b274a43595cfbfa1616e4bTimo Sirainenvoid seq_range_array_invert(ARRAY_TYPE(seq_range) *array,
cb3ab2fd5668700a89b274a43595cfbfa1616e4bTimo Sirainen uint32_t min_seq, uint32_t max_seq);
7db7fbea5d8a07463b625f93d69166d56018dadfTimo Sirainen
7db7fbea5d8a07463b625f93d69166d56018dadfTimo Sirainen#endif
7db7fbea5d8a07463b625f93d69166d56018dadfTimo Sirainen