First import of IO project

This commit is contained in:
Damien Dupuis 2009-12-11 12:48:37 +00:00
parent 089ff09c4f
commit 23d6a80058
11 changed files with 300 additions and 0 deletions

8
vlsisapd/CMakeLists.txt Normal file
View File

@ -0,0 +1,8 @@
PROJECT(IO)
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0)
SET(CMAKE_MODULE_PATH "${IO_SOURCE_DIR}/cmake_modules/")
ADD_SUBDIRECTORY(agds)
ADD_SUBDIRECTORY(cmake_modules)

View File

@ -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 SHARED ${cpps})
INSTALL(TARGETS agds DESTINATION /lib)
INSTALL(FILES ${includes} DESTINATION /include/io/agds)

View File

@ -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 IO {
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

View File

@ -0,0 +1,19 @@
#ifndef __GDS_ELEMENT_H
#define __GDS_ELEMENT_H
namespace IO {
class GdsElement {
protected:
inline GdsElement(int layer);
public:
virtual bool write ( ofstream &file ) = 0;
protected:
int _layer;
};
inline GdsElement::GdsElement(int layer) : _layer(layer) {}
}
#endif

View File

@ -0,0 +1,58 @@
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
#include "GdsLibrary.h"
namespace IO {
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
<< " PHYSUNITS " << _physUnits << ";" << endl
<< endl;
// 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

View File

@ -0,0 +1,31 @@
#ifndef __GDS_LIBRARY_H
#define __GDS_LIBRARY_H
#include <vector>
using namespace std;
#include "GdsStructure.h"
namespace IO {
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

View File

@ -0,0 +1,30 @@
#include <iostream>
#include <iomanip>
using namespace std;
#include "GdsRectangle.h"
namespace IO {
GdsRectangle::GdsRectangle(int layer, double xmin, double ymin, double xmax, double ymax)
: GdsElement(layer)
, _xmin(xmin)
, _ymin(ymin)
, _xmax(xmax)
, _ymax(ymax) {}
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;
}
}

View File

@ -0,0 +1,23 @@
#ifndef __GDS_RECTANGLE_H
#define __GDS_RECTANGLE_H
#include <fstream>
#include "GdsElement.h"
namespace IO {
class GdsRectangle : public GdsElement {
public:
GdsRectangle(int layer, double xmin, double ymin, double xmax, double ymax);
virtual bool write ( ofstream &file );
private:
double _xmin;
double _ymin;
double _xmax;
double _ymax;
};
}
#endif

View File

@ -0,0 +1,47 @@
#include <iostream>
#include <ctime>
using namespace std;
#include "GdsStructure.h"
namespace IO {
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

View File

@ -0,0 +1,2 @@
install(FILES FindIO.cmake
DESTINATION /share/cmake_modules)

View File

@ -0,0 +1,44 @@
# - Try to find the IO libraries
# Once done this will define
#
# IO_FOUND - system has the IO library
# IO_INCLUDE_DIR - the IO include directory
# IO_LIBRARIES - The libraries needed to use IO
SET(IO_DIR_SEARCH $ENV{IO_TOP})
FIND_PATH(IO_INCLUDE_DIR
NAMES io/agds/GdsLibrary.h
PATHS ${IO_DIR_SEARCH}
PATH_SUFFIXES include
)
FIND_LIBRARY(IO_AGDS_LIBRARY
NAMES agds
PATHS ${IO_DIR_SEARCH}
PATH_SUFFIXES lib
)
IF(IO_INCLUDE_DIR AND IO_AGDS_LIBRARY)
SET(IO_FOUND TRUE)
SET(IO_LIBRARIES ${IO_AGDS_LIBRARY})
ELSE(IO_INCLUDE_DIR AND IO_AGDS_LIBRARY)
SET(IO_FOUND FALSE)
SET(IO_LIBRARIES)
ENDIF(IO_INCLUDE_DIR AND IO_AGDS_LIBRARY)
IF (NOT IO_FOUND)
SET(IO_MESSAGE
"IO library was not found. Make sure IO_TOP env variable is set.")
IF (NOT IO_FIND_QUIETLY)
MESSAGE(STATUS "${IO_MESSAGE}")
ELSE(NOT IO_FIND_QUIETLY)
IF(IO_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "${IO_MESSAGE}")
ENDIF(IO_FIND_REQUIRED)
ENDIF(NOT IO_FIND_QUIETLY)
ELSE (NOT IO_FOUND)
MESSAGE(STATUS "IO library was found in ${IO_DIR_SEARCH}")
ENDIF (NOT IO_FOUND)