First import of IO project
This commit is contained in:
parent
089ff09c4f
commit
23d6a80058
|
@ -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)
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
install(FILES FindIO.cmake
|
||||
DESTINATION /share/cmake_modules)
|
|
@ -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)
|
||||
|
Loading…
Reference in New Issue