changed: the way of building the cmslu
main Makefile is in an application directory in cmslu/ there are only libraries: core.a content.a confparser.a templates.a added: macros APPTEMPLATES APPFUNCTIONS defined in the application's Makefile added: PatternCacher added: cmslu function 'run' files which have exec permissions can be run (run is a default function) after read from the database the content is parsed into Ezc::Pattern object, this object is then cached in PatternCacher added: FunctionCodeParser - will be used to parse the code from standard functions (ls/cat/...) git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@475 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
77
templates/patterncacher.h
Executable file
77
templates/patterncacher.h
Executable file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* This file is a part of CMSLU -- Content Management System like Unix
|
||||
* and is not publicly distributed
|
||||
*
|
||||
* Copyright (c) 2008, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef headerfilepatterncacher
|
||||
#define headerfilepatterncacher
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
#include "../core/item.h"
|
||||
#include "../../ezc/src/ezc.h"
|
||||
#include "../core/log.h"
|
||||
|
||||
|
||||
|
||||
class PatternCacher
|
||||
{
|
||||
struct PatternUsed
|
||||
{
|
||||
Ezc::Pattern pattern;
|
||||
int used; // how many times used (incremented by GetPattern and UpdatePattern)
|
||||
int item_id;
|
||||
};
|
||||
|
||||
typedef std::map<long, PatternUsed> PatternTab;
|
||||
PatternTab pattern_tab;
|
||||
|
||||
|
||||
// temporarily struct used during deleting some items from pattern_tab
|
||||
struct PatternErase
|
||||
{
|
||||
PatternTab::iterator iter;
|
||||
int used;
|
||||
|
||||
bool operator<(const PatternErase & p) const { return used < p.used; }
|
||||
};
|
||||
|
||||
// temporarily buffer used during deleting some items from pattern_tab
|
||||
std::vector<PatternErase> erase_tab;
|
||||
|
||||
|
||||
|
||||
void CreatePattern(const Item & item, Ezc::Pattern & pattern);
|
||||
void AddIndexes(const Item & item, size_t pattern_index);
|
||||
Ezc::Pattern * AddPattern(const Item & item);
|
||||
void CheckTableSize();
|
||||
|
||||
|
||||
// the size of pattern_tab when we are deleting some items
|
||||
size_t when_delete_patterns;
|
||||
|
||||
// how many items to delete
|
||||
size_t how_many_delete;
|
||||
|
||||
public:
|
||||
|
||||
PatternCacher();
|
||||
|
||||
// returning a pattern corresponding to the 'item'
|
||||
Ezc::Pattern * GetPattern(const Item & item);
|
||||
|
||||
// updating the pattern for the item
|
||||
// if there is no such a pattern the method does nothing
|
||||
void UpdatePattern(const Item & item);
|
||||
|
||||
// deleting the pattern for the item
|
||||
// if there is no such a pattern the method does nothing
|
||||
void DeletePattern(const Item & item);
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user