Source Code (Use browser search to find items of interest.)

Class Index

kdesu'Repository (./kdebase/kdesu/kdesud/repo.h:31)

class Repository {
public:
    Repository();
    ~Repository();

    /**
     * Expire data elements which are too old.
     */
    int expire();

    /**
     * Add a data element 
     */
    void add(const QCString &key, Data_entry &data);

    /**
     * Delete a data element. The value field is overwritten before it is
     * deleted because it could contain sensitive information.
     */
    int remove(const QCString& key);

    /**
     * Return a data entry.
     */
    const Data_entry *find(const QCString &key) const;

private:

    QMap<QCString,Data_entry> repo;
    QMap<QCString,Data_entry>::Iterator repo_it;
    mutable QMap<QCString,Data_entry>::ConstIterator repo_cit;

    unsigned head_time;
};

kdesu'Repository::Repository() (./kdebase/kdesu/kdesud/repo.cpp:19)

Repository::Repository()
{
    head_time = (unsigned) -1;
}



kdesu'Repository::~Repository() (./kdebase/kdesu/kdesud/repo.cpp:25)

Repository::~Repository()
{}



kdesu'Repository::add() (./kdebase/kdesu/kdesud/repo.cpp:29)

void Repository::add(const QCString &key, Data_entry &data)
{
    if (repo.find(key) != repo.end())
	remove(key);

    data.timeout += time(0L);
    head_time = QMIN(head_time, data.timeout);
    repo[key] = data;
}



kdesu'Repository::remove() (./kdebase/kdesu/kdesud/repo.cpp:40)

int Repository::remove(const QCString &key)
{
    repo_it = repo.find(key);
    if (repo_it == repo.end()) 
	return -1;
    
    repo_it.data().value.fill('x');
    repo.remove(key);

    return 0;
}



kdesu'Repository::find() (./kdebase/kdesu/kdesud/repo.cpp:53)

const Data_entry *Repository::find(const QCString &key) const
{
    repo_cit = repo.find(key);
    if (repo_cit == repo.end())
	return 0L;

    return &repo_cit.data();
}



kdesu'Repository::expire() (./kdebase/kdesu/kdesud/repo.cpp:63)

int Repository::expire()
{
    unsigned current = time(0L);

    if (current < head_time)
	return 0;
    
    QValueStack<QCString> keys;

    unsigned t;
    head_time = (unsigned) -1;
    for (repo_cit=repo.begin(); repo_cit!=repo.end(); repo_cit++) {
	t = repo_cit.data().timeout;
	if (current >= t)
	    keys.push(repo_cit.key());
	else 
	    head_time = QMIN(head_time, t);
    }

    
    int n = keys.count();
    while (!keys.isEmpty())
	remove(keys.pop());
    
    return n;
}