mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
forgot these...
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8924 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
02ebc072b0
commit
5a153a4961
24
src/coordcache.C
Normal file
24
src/coordcache.C
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
#include "coordcache.h"
|
||||
#include "debug.h"
|
||||
|
||||
CoordCache theCoords;
|
||||
|
||||
// just a helper to be able to set a breakpoint
|
||||
void lyxbreaker(void const * data, const char * hint, int size)
|
||||
{
|
||||
lyxerr << "break on pointer: " << data << " hint: " << hint
|
||||
<< " size: " << size << std::endl;
|
||||
}
|
||||
|
||||
|
||||
void CoordCache::clear()
|
||||
{
|
||||
lyxerr << "CoordCache: removing " << arrays_.data_.size()
|
||||
<< " arrays" << std::endl;
|
||||
lyxerr << "CoordCache: removing " << insets_.data_.size()
|
||||
<< " insets" << std::endl;
|
||||
arrays_.clear();
|
||||
insets_.clear();
|
||||
}
|
||||
|
91
src/coordcache.h
Normal file
91
src/coordcache.h
Normal file
@ -0,0 +1,91 @@
|
||||
#ifndef COORDCACHE_H
|
||||
#define COORDCACHE_H
|
||||
|
||||
#include "mathed/math_data.h"
|
||||
#include "insets/insetbase.h"
|
||||
#include "lyxtext.h"
|
||||
|
||||
#include <boost/assert.hpp>
|
||||
|
||||
#include <map>
|
||||
|
||||
void lyxbreaker(void const * data, const char * hint, int size);
|
||||
|
||||
struct Point {
|
||||
Point()
|
||||
: x_(0), y_(0)
|
||||
{}
|
||||
|
||||
Point(int x, int y) : x_(x), y_(y)
|
||||
{
|
||||
BOOST_ASSERT(x > -3000);
|
||||
BOOST_ASSERT(x < 4000);
|
||||
BOOST_ASSERT(y > -3000);
|
||||
BOOST_ASSERT(y < 4000);
|
||||
}
|
||||
|
||||
int x_, y_;
|
||||
};
|
||||
|
||||
|
||||
template <class T> class CoordCacheBase {
|
||||
public:
|
||||
void clear()
|
||||
{
|
||||
data_.clear();
|
||||
}
|
||||
|
||||
void add(T const * thing, int x, int y)
|
||||
{
|
||||
data_[thing] = Point(x, y);
|
||||
}
|
||||
|
||||
int x(T const * thing) const
|
||||
{
|
||||
check(thing, "x");
|
||||
return data_.find(thing)->second.x_;
|
||||
}
|
||||
|
||||
int y(T const * thing) const
|
||||
{
|
||||
check(thing, "y");
|
||||
return data_.find(thing)->second.y_;
|
||||
}
|
||||
|
||||
Point xy(T const * thing) const
|
||||
{
|
||||
check(thing, "xy");
|
||||
return data_.find(thing)->second;
|
||||
}
|
||||
|
||||
bool has(T const * thing) const
|
||||
{
|
||||
return data_.find(thing) != data_.end();
|
||||
}
|
||||
|
||||
private:
|
||||
friend class CoordCache;
|
||||
|
||||
void check(T const * thing, char const * hint) const
|
||||
{
|
||||
if (!has(thing)) {
|
||||
lyxbreaker(thing, hint, data_.size());
|
||||
BOOST_ASSERT(false);
|
||||
}
|
||||
}
|
||||
|
||||
std::map<T const *, Point> data_;
|
||||
};
|
||||
|
||||
|
||||
class CoordCache {
|
||||
public:
|
||||
void clear();
|
||||
|
||||
CoordCacheBase<MathArray> arrays_;
|
||||
CoordCacheBase<InsetBase> insets_;
|
||||
};
|
||||
|
||||
extern CoordCache theCoords;
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user