source: tags/cvs_2_svn/GENOM/GEN_tools.cxx

Last change on this file was 3009, checked in by westram, 20 years ago
  • added GEN_pos_begin_entry_name, GEN_pos_end_entry_name
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.8 KB
Line 
1//  ==================================================================== //
2//                                                                       //
3//    File      : GEN_tools.cxx                                          //
4//    Purpose   : Some helper functions                                  //
5//    Time-stamp: <Thu Jul/01/2004 09:08 MET Coder@ReallySoft.de>        //
6//                                                                       //
7//                                                                       //
8//  Coded by Ralf Westram (coder@reallysoft.de) in July 2004             //
9//  Copyright Department of Microbiology (Technical University Munich)   //
10//                                                                       //
11//  Visit our web site at: http://www.arb-home.de/                       //
12//                                                                       //
13//  ==================================================================== //
14
15#include <cstdio>
16#include <cstdlib>
17#include <cstring>
18#include <arbdb.h>
19
20#include "GEN_local.hxx"
21#include "GEN_tools.hxx"
22
23using namespace std;
24
25// provide fast access to strings like
26// "pos_begin", "pos_begin2", "pos_begin3", ...
27class NumberedEntries {
28    int    size;
29    char **entries;
30
31    void fill_entries(int from_idx, int to_idx) {
32        while (from_idx <= to_idx) {
33            entries[from_idx] = GBS_global_string_copy("%s%i", entries[0], from_idx+1); // entries[1] gets number '2'
34            ++from_idx;
35        }
36    }
37
38    void increase_size(int new_size) {
39        char **new_entries = new char*[new_size];
40
41        for (int i = 0; i<size; ++i) new_entries[i] = entries[i];
42
43        delete [] entries;
44
45        entries      = new_entries;
46        int old_size = size;
47        size         = new_size;
48
49        fill_entries(old_size, new_size-1);
50    }
51
52    NumberedEntries(const NumberedEntries& other); // copying not allowed
53    NumberedEntries& operator = (const NumberedEntries& other); // assignment not allowed
54public:
55    NumberedEntries(const char *prefix)
56        : size(5)
57        , entries(new char*[size])
58    {
59        entries[0] = strdup(prefix);
60        fill_entries(1, size-1);
61    }
62    ~NumberedEntries() {
63        for (int i = 0; i<size; ++i) free(entries[i]);
64        delete [] entries;
65    }
66
67    const char *get_entry(int nr) {
68        gen_assert(nr >= 1);
69        if (nr > size) {
70            int new_size = size+5;
71            if (nr>new_size) new_size = nr+5;
72            increase_size(new_size);
73        }
74        return entries[nr-1];
75    }
76};
77
78
79const char *GEN_pos_begin_entry_name(int nr) {
80    static NumberedEntries entries("pos_begin");
81    return entries.get_entry(nr);
82}
83const char *GEN_pos_end_entry_name(int nr) {
84    static NumberedEntries entries("pos_end");
85    return entries.get_entry(nr);
86}
87
88
89
90
91
Note: See TracBrowser for help on using the repository browser.