/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#ifndef POLYGRAPH__LOGANALYZERS_BLOBDB_H
#define POLYGRAPH__LOGANALYZERS_BLOBDB_H
#include "xml/XmlNodes.h"
#include "loganalyzers/InfoScope.h"
#include "loganalyzers/BlobIdx.h"
class ReportBlob;
// a collection of ReportBlobs
class BlobDb {
public:
typedef InfoScope Scope;
public:
static String Key(const String &name, const Scope &scope);
static String KeySuffix(const Scope &scope);
public:
BlobDb();
const ReportBlob *has(const String &key);
const ReportBlob *add(const ReportBlob &b);
BlobDb &operator <<(const ReportBlob &b) { add(b); return *this; }
const XmlNodes &blobs() const { return theBlobs; }
// never fail
void link(const String &oldString, const String &newString);
const ReportBlob &get(const String &key);
const XmlNode &include(const String &key); // at most once
const XmlNode "e(const String &key); // many times
XmlNode &ptr(const String &key, const XmlNodes &context);
ostream &print(ostream &os, const String &pfx) const;
protected:
const ReportBlob *find(const String &key) const;
protected:
XmlNodes theBlobs;
BlobIdx theBlobIdx;
XmlNodes theIncludes;
XmlNodes thePtrs;
XmlNodes theErrors;
};
inline
String operator +(const String &name, const InfoScope &scope) {
return BlobDb::Key(name, scope);
}
inline
String operator +(const char *name, const InfoScope &scope) {
return String(name) + scope;
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1