adding agds directory
This commit is contained in:
parent
eefb15127a
commit
b7926ee279
|
@ -0,0 +1,9 @@
|
||||||
|
INCLUDE_DIRECTORIES(${CHAMS_SOURCE_DIR}/agds)
|
||||||
|
|
||||||
|
SET ( includes GdsLibrary.h GdsStructure.h GdsElement.h GdsRectangle.h )
|
||||||
|
SET ( cpps GdsLibrary.cpp GdsStructure.cpp GdsRectangle.cpp )
|
||||||
|
|
||||||
|
ADD_LIBRARY(agds ${cpps})
|
||||||
|
INSTALL(TARGETS agds DESTINATION lib${LIB_SUFFIX})
|
||||||
|
|
||||||
|
INSTALL(FILES ${includes} DESTINATION include/vlsisapd/agds)
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef __GDS_ELEMENT_H
|
||||||
|
#define __GDS_ELEMENT_H
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
class GdsElement {
|
||||||
|
protected:
|
||||||
|
inline GdsElement (int layer);
|
||||||
|
virtual ~GdsElement ();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual bool write ( ofstream &file ) = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int _layer;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline GdsElement::GdsElement(int layer) : _layer(layer) {}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <ctime>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "GdsLibrary.h"
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
|
||||||
|
GdsLibrary::GdsLibrary(string libName)
|
||||||
|
: _libName(libName)
|
||||||
|
, _userUnits(0.00)
|
||||||
|
, _physUnits(0.00) {}
|
||||||
|
|
||||||
|
|
||||||
|
bool GdsLibrary::addStructure(GdsStructure* gdsStruct) {
|
||||||
|
if(gdsStruct)
|
||||||
|
_structs.push_back(gdsStruct);
|
||||||
|
else {
|
||||||
|
cerr << "[GDS DRIVE ERROR]: cannot hold GdsStructure: " << gdsStruct->getName() << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GdsLibrary::write(string filename) {
|
||||||
|
time_t curtime = time(0);
|
||||||
|
tm now = *localtime(&curtime);
|
||||||
|
char date[BUFSIZ]={0};
|
||||||
|
const char format[]="%y-%m-%d %H:%M:%S";
|
||||||
|
if (!strftime(date, sizeof(date)-1, format, &now)>0)
|
||||||
|
cerr << "[GDS DRIVE ERROR]: cannot build current date." << endl;
|
||||||
|
|
||||||
|
ofstream file;
|
||||||
|
file.open(filename.c_str(), ios::out);
|
||||||
|
// Header
|
||||||
|
file << "HEADER 5;" << endl
|
||||||
|
<< "BGNLIB;" << endl
|
||||||
|
<< " LASTMOD {" << date << "};" << endl
|
||||||
|
<< " LASTACC {" << date << "};" << endl
|
||||||
|
<< "LIBNAME " << _libName << ".DB;" << endl
|
||||||
|
<< "UNITS;" << endl
|
||||||
|
<< " USERUNITS " << _userUnits << ";" << endl;
|
||||||
|
file << scientific << " PHYSUNITS " << _physUnits << ";" << endl
|
||||||
|
<< endl;
|
||||||
|
file.unsetf(ios::floatfield);
|
||||||
|
|
||||||
|
// For each Struct : write struct.
|
||||||
|
for ( vector<GdsStructure*>::iterator it = _structs.begin() ; it < _structs.end() ; it++ ) {
|
||||||
|
(*it)->write(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Footer
|
||||||
|
file << "ENDLIB;" << endl;
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} // namespace
|
|
@ -0,0 +1,31 @@
|
||||||
|
#ifndef __GDS_LIBRARY_H
|
||||||
|
#define __GDS_LIBRARY_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "GdsStructure.h"
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
class GdsLibrary {
|
||||||
|
public:
|
||||||
|
GdsLibrary(string libName);
|
||||||
|
|
||||||
|
inline void setUserUnits ( double userUnits );
|
||||||
|
inline void setPhysUnits ( double physUnits );
|
||||||
|
|
||||||
|
bool addStructure ( GdsStructure* );
|
||||||
|
bool write ( string fileName );
|
||||||
|
|
||||||
|
private:
|
||||||
|
string _libName;
|
||||||
|
double _userUnits;
|
||||||
|
double _physUnits;
|
||||||
|
|
||||||
|
vector<GdsStructure*> _structs;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void GdsLibrary::setUserUnits(double userUnits) { _userUnits = userUnits; };
|
||||||
|
inline void GdsLibrary::setPhysUnits(double physUnits) { _physUnits = physUnits; };
|
||||||
|
} // namespace
|
||||||
|
#endif
|
|
@ -0,0 +1,34 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "GdsRectangle.h"
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
GdsElement::~GdsElement () { }
|
||||||
|
|
||||||
|
GdsRectangle::GdsRectangle(int layer, double xmin, double ymin, double xmax, double ymax)
|
||||||
|
: GdsElement(layer)
|
||||||
|
, _xmin(xmin)
|
||||||
|
, _ymin(ymin)
|
||||||
|
, _xmax(xmax)
|
||||||
|
, _ymax(ymax) {}
|
||||||
|
|
||||||
|
GdsRectangle::~GdsRectangle () { }
|
||||||
|
|
||||||
|
bool GdsRectangle::write(ofstream &file) {
|
||||||
|
file << "BOUNDARY;" << endl
|
||||||
|
<< "LAYER " << _layer << ";" << endl
|
||||||
|
<< "DATATYPE 0;" << endl
|
||||||
|
<< "XY 5;" << endl
|
||||||
|
<< " X: " << _xmin << ";\tY: " << _ymin << ";" << endl
|
||||||
|
<< " X: " << _xmin << ";\tY: " << _ymax << ";" << endl
|
||||||
|
<< " X: " << _xmax << ";\tY: " << _ymax << ";" << endl
|
||||||
|
<< " X: " << _xmax << ";\tY: " << _ymin << ";" << endl
|
||||||
|
<< " X: " << _xmin << ";\tY: " << _ymin << ";" << endl
|
||||||
|
<< "ENDEL;" << endl
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef __GDS_RECTANGLE_H
|
||||||
|
#define __GDS_RECTANGLE_H
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include "GdsElement.h"
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
class GdsRectangle : public GdsElement {
|
||||||
|
public:
|
||||||
|
GdsRectangle (int layer, double xmin, double ymin, double xmax, double ymax);
|
||||||
|
virtual ~GdsRectangle ();
|
||||||
|
virtual bool write ( ofstream &file );
|
||||||
|
private:
|
||||||
|
double _xmin;
|
||||||
|
double _ymin;
|
||||||
|
double _xmax;
|
||||||
|
double _ymax;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <ctime>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "GdsStructure.h"
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
GdsStructure::GdsStructure(string strName)
|
||||||
|
: _strName(strName) {}
|
||||||
|
|
||||||
|
|
||||||
|
bool GdsStructure::addElement(GdsElement* gdsElement) {
|
||||||
|
if(gdsElement)
|
||||||
|
_elements.push_back(gdsElement);
|
||||||
|
else {
|
||||||
|
cerr << "[GDS DRIVE ERROR]: cannot hold GdsElement." << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GdsStructure::write(ofstream &file) {
|
||||||
|
time_t curtime = time(0);
|
||||||
|
tm now = *localtime(&curtime);
|
||||||
|
char date[BUFSIZ]={0};
|
||||||
|
const char format[]="%y-%m-%d %H:%M:%S";
|
||||||
|
if (!strftime(date, sizeof(date)-1, format, &now)>0)
|
||||||
|
cerr << "[GDS DRIVE ERROR]: cannot build current date." << endl;
|
||||||
|
|
||||||
|
// Header
|
||||||
|
file << "BGNSTR;" << endl
|
||||||
|
<< " CREATION {" << date << "};" << endl
|
||||||
|
<< " LASTMOD {" << date << "};" << endl
|
||||||
|
<< "STRNAME " << _strName << ";" << endl
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
// For each Element : write element.
|
||||||
|
for ( vector<GdsElement*>::iterator it = _elements.begin() ; it < _elements.end() ; it++ ) {
|
||||||
|
(*it)->write(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Footer
|
||||||
|
file << "ENDSTR;" << endl;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} // namespace
|
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef __GDS_STRUCTURE_H
|
||||||
|
#define __GDS_STRUCTURE_H
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include "GdsElement.h"
|
||||||
|
|
||||||
|
namespace vlsisapd {
|
||||||
|
class GdsStructure {
|
||||||
|
public:
|
||||||
|
GdsStructure(string strName);
|
||||||
|
|
||||||
|
bool addElement ( GdsElement* );
|
||||||
|
bool write ( ofstream &file );
|
||||||
|
|
||||||
|
inline string getName();
|
||||||
|
|
||||||
|
private:
|
||||||
|
string _strName;
|
||||||
|
|
||||||
|
vector<GdsElement*> _elements;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline string GdsStructure::getName() { return _strName; };
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue