1 // ***************************************************************************** 2 // ***************************************************************************** 3 // Copyright 2012 - 2013, Cadence Design Systems 4 // 5 // This file is part of the Cadence LEF/DEF Open Source 6 // Distribution, Product Version 5.8. 7 // 8 // Licensed under the Apache License, Version 2.0 (the "License"); 9 // you may not use this file except in compliance with the License. 10 // You may obtain a copy of the License at 11 // 12 // http://www.apache.org/licenses/LICENSE-2.0 13 // 14 // Unless required by applicable law or agreed to in writing, software 15 // distributed under the License is distributed on an "AS IS" BASIS, 16 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 17 // implied. See the License for the specific language governing 18 // permissions and limitations under the License. 19 // 20 // For updates, support, or to become part of the LEF/DEF Community, 21 // check www.openeda.org for details. 22 // 23 // $Author: dell $ 24 // $Revision: #1 $ 25 // $Date: 2017/06/06 $ 26 // $State: $ 27 // ***************************************************************************** 28 // ***************************************************************************** 29 30 #ifndef lefiKRDEFS_h 31 #define lefiKRDEFS_h 32 33 #define BEGIN_LEFDEF_PARSER_NAMESPACE namespace LefDefParser { 34 #define END_LEFDEF_PARSER_NAMESPACE } 35 #define USE_LEFDEF_PARSER_NAMESPACE using namespace LefDefParser; 36 37 // Added by mgwoo 38 #define LEF_COPY_CONSTRUCTOR_H(cname) cname(const cname & prev) 39 #define LEF_COPY_CONSTRUCTOR_C(cname) cname::cname(const cname & prev) 40 41 #define LEF_ASSIGN_OPERATOR_H(cname) cname& operator=(const cname & prev) 42 #define LEF_ASSIGN_OPERATOR_C(cname) cname& cname::operator=(const cname & prev) 43 #define CHECK_SELF_ASSIGN \ 44 { \ 45 if (this == &prev) { \ 46 return *this; \ 47 } \ 48 } 49 50 #define LEF_COPY_FUNC(varname) {(varname) = prev.varname;} 51 #define LEF_MALLOC_FUNC(varname, vartype, length) \ 52 { \ 53 if( prev.varname ) { \ 54 varname = (vartype*) lefMalloc(length); \ 55 memcpy(varname, prev.varname, length); \ 56 } \ 57 } 58 59 #define LEF_MALLOC_FUNC_WITH_OPERATOR(varname, vartype, length) \ 60 { \ 61 if( prev.varname ) { \ 62 varname = (vartype*) lefMalloc(length); \ 63 *(varname) = *(prev.varname); \ 64 } \ 65 } 66 67 68 #define LEF_MALLOC_FUNC_FOR_2D(varname, vartype, length1, length2 ) \ 69 { \ 70 if(prev.varname) { \ 71 varname = (vartype**) lefMalloc( sizeof(vartype*) * length1 ); \ 72 \ 73 for(int i=0; i<length1; i++) { \ 74 if( prev.varname[i] ) { \ 75 varname[i] = (vartype*) lefMalloc( sizeof(vartype) * length2 );\ 76 *(varname[i]) = *(prev.varname[i]); \ 77 } \ 78 else { \ 79 varname[i] = 0; \ 80 } \ 81 } \ 82 } \ 83 else { \ 84 varname = 0; \ 85 } \ 86 } 87 88 #define LEF_MALLOC_FUNC_FOR_2D_ALWAYS_MALLOC(varname, vartype, length1, length2 ) \ 89 { \ 90 if(prev.varname) { \ 91 varname = (vartype**) lefMalloc( sizeof(vartype*) * length1 ); \ 92 \ 93 for(int i=0; i<length1; i++) { \ 94 varname[i] = (vartype*) lefMalloc( sizeof(vartype) * length2 ); \ 95 if( prev.varname[i] ) { \ 96 *(varname[i]) = *(prev.varname[i]); \ 97 } \ 98 } \ 99 } \ 100 else { \ 101 varname = 0; \ 102 } \ 103 } 104 105 #define LEF_MALLOC_FUNC_FOR_2D_STR(varname, length ) \ 106 { \ 107 if(prev.varname) { \ 108 varname = (char**) lefMalloc( sizeof(char*) * length ); \ 109 \ 110 for(int i=0; i<length; i++) { \ 111 if( prev.varname[i] ) { \ 112 int len = strlen(prev.varname[i])+1; \ 113 varname[i] = (char*) lefMalloc( len ); \ 114 strcpy( varname[i], prev.varname[i]); \ 115 } \ 116 else { \ 117 varname[i] = 0; \ 118 } \ 119 } \ 120 } \ 121 else { \ 122 varname = 0; \ 123 } \ 124 } 125 126 #endif 127