2012-08-11 13:24:08 +00:00
/********************************************************************************
2012-07-19 13:07:55 +00:00
* *
* This file is part of IfcOpenShell. *
* *
* IfcOpenShell is free software: you can redistribute it and/or modify *
* it under the terms of the Lesser GNU General Public License as published by *
* the Free Software Foundation, either version 3.0 of the License, or *
* (at your option) any later version. *
* *
* IfcOpenShell is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* Lesser GNU General Public License for more details. *
* *
* You should have received a copy of the Lesser GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
********************************************************************************/
2014-06-11 10:24:11 +00:00
# include <iomanip>
2012-11-04 16:26:33 +00:00
# include "../ifcparse/IfcParse.h"
# include "../ifcparse/IfcWrite.h"
# include "../ifcparse/IfcWritableEntity.h"
# include "../ifcparse/IfcCharacterDecoder.h"
2012-07-19 13:07:55 +00:00
using namespace IfcWrite ;
2014-02-17 22:13:55 +00:00
IfcWritableEntity : : IfcWritableEntity ( IfcSchema : : Type : : Enum t ) {
2012-07-19 13:07:55 +00:00
_type = t ;
_id = 0 ;
2012-08-11 13:24:08 +00:00
file = 0 ;
2012-07-19 13:07:55 +00:00
}
2013-08-04 04:49:08 +00:00
IfcWritableEntity : : ~ IfcWritableEntity ( ) {
delete _id ;
}
2012-07-19 13:07:55 +00:00
int IfcWritableEntity : : setId ( int i ) {
2014-05-05 16:17:28 +00:00
if ( i > 0 ) {
delete _id ;
return * ( _id = new int ( i ) ) ;
} else {
if ( _id ) { return * _id ; }
else {
delete _id ;
return * ( _id = new int ( file - > FreshId ( ) ) ) ;
}
}
2012-07-19 13:07:55 +00:00
}
IfcWritableEntity : : IfcWritableEntity ( IfcAbstractEntity * e )
{
2012-08-11 13:24:08 +00:00
file = e - > file ;
2012-07-19 13:07:55 +00:00
_type = e - > type ( ) ;
2013-08-04 04:49:08 +00:00
delete _id ;
2012-07-19 13:07:55 +00:00
_id = new int ( e - > id ( ) ) ;
const unsigned int count = e - > getArgumentCount ( ) ;
for ( unsigned int i = 0 ; i < count ; + + i ) {
args [ i ] = e - > getArgument ( i ) ;
writemask [ i ] = false ;
}
}
// TODO: Reove redundancy with IfcParse::Entity
2014-05-04 14:42:55 +00:00
IfcEntityList : : ptr IfcWritableEntity : : getInverse ( IfcSchema : : Type : : Enum c ) {
IfcEntityList : : ptr l = IfcEntityList : : ptr ( new IfcEntityList ) ;
2012-07-19 13:07:55 +00:00
int id = _id ? * _id : setId ( ) ;
2014-05-04 14:42:55 +00:00
IfcEntityList : : ptr all = file - > EntitiesByReference ( id ) ;
2012-07-19 13:07:55 +00:00
if ( ! all ) return l ;
for ( IfcEntityList : : it it = all - > begin ( ) ; it ! = all - > end ( ) ; + + it ) {
2014-02-17 22:13:55 +00:00
if ( c = = IfcSchema : : Type : : ALL | | ( * it ) - > is ( c ) ) {
2012-07-19 13:07:55 +00:00
l - > push ( * it ) ;
}
}
return l ;
}
2014-05-04 14:42:55 +00:00
IfcEntityList : : ptr IfcWritableEntity : : getInverse ( IfcSchema : : Type : : Enum c , int i , const std : : string & a ) {
IfcEntityList : : ptr l = IfcEntityList : : ptr ( new IfcEntityList ) ;
IfcEntityList : : ptr all = getInverse ( c ) ;
2012-07-19 13:07:55 +00:00
for ( IfcEntityList : : it it = all - > begin ( ) ; it ! = all - > end ( ) ; + + it ) {
const std : : string s = * ( * it ) - > entity - > getArgument ( i ) ;
if ( s = = a ) {
l - > push ( * it ) ;
}
}
return l ;
}
2014-05-04 14:42:55 +00:00
std : : string IfcWritableEntity : : datatype ( ) const { return IfcSchema : : Type : : ToString ( _type ) ; }
Argument * IfcWritableEntity : : getArgument ( unsigned int i ) { if ( i > = getArgumentCount ( ) ) throw IfcParse : : IfcException ( " Argument not set " ) ; return args [ i ] ; } unsigned int IfcWritableEntity : : getArgumentCount ( ) const { return args . size ( ) ; }
2014-02-17 22:13:55 +00:00
IfcSchema : : Type : : Enum IfcWritableEntity : : type ( ) const { return _type ; }
bool IfcWritableEntity : : is ( IfcSchema : : Type : : Enum v ) const { return _type = = v ; }
2014-05-04 14:42:55 +00:00
std : : string IfcWritableEntity : : toString ( bool upper ) const {
2012-07-19 13:07:55 +00:00
std : : stringstream ss ;
std : : string dt = datatype ( ) ;
if ( upper ) {
for ( std : : string : : iterator p = dt . begin ( ) ; p ! = dt . end ( ) ; + + p ) * p = toupper ( * p ) ;
}
if ( _id ) ss < < " # " < < * _id ;
ss < < " = " < < dt < < " ( " ;
2014-05-04 14:42:55 +00:00
for ( std : : map < int , Argument * > : : const_iterator it = args . begin ( ) ; it ! = args . end ( ) ; + + it ) {
2012-07-19 13:07:55 +00:00
if ( it ! = args . begin ( ) ) ss < < " , " ;
2014-05-04 14:42:55 +00:00
const Argument * a = it - > second ;
2012-07-19 13:07:55 +00:00
ss < < it - > second - > toString ( upper ) ;
}
ss < < " ) " ;
return ss . str ( ) ;
}
2013-08-04 04:49:08 +00:00
unsigned int IfcWritableEntity : : id ( ) {
if ( ! _id ) {
_id = new int ( file - > FreshId ( ) ) ;
}
return * _id ;
}
2014-11-02 18:36:51 +00:00
IfcWritableEntity * IfcWritableEntity : : isWritable ( ) { return this ; }
2012-07-19 13:07:55 +00:00
bool IfcWritableEntity : : arg_writable ( int i ) {
std : : map < int , bool > : : const_iterator it = writemask . find ( i ) ;
if ( it = = writemask . end ( ) ) return false ;
else return it - > second ;
}
void IfcWritableEntity : : arg_writable ( int i , bool b ) {
writemask [ i ] = b ;
}
2013-08-04 04:49:08 +00:00
template < typename T > void IfcWritableEntity : : _setArgument ( int i , const T & t ) {
2012-08-11 13:24:08 +00:00
if ( arg_writable ( i ) ) delete args [ i ] ;
2013-08-04 04:49:08 +00:00
IfcWriteArgument * arg = new IfcWriteArgument ( this ) ;
args [ i ] = arg ;
arg - > set ( t ) ;
2012-08-11 13:24:08 +00:00
arg_writable ( i , true ) ;
}
2013-08-04 04:49:08 +00:00
void IfcWritableEntity : : setArgument ( int i ) {
_setArgument ( i , boost : : none ) ;
}
2012-11-10 09:36:34 +00:00
void IfcWritableEntity : : setArgumentDerived ( int i ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , IfcWriteArgument : : Derived ( ) ) ;
2012-11-10 09:36:34 +00:00
}
2012-07-19 13:07:55 +00:00
void IfcWritableEntity : : setArgument ( int i , int v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-11-04 16:26:33 +00:00
}
void IfcWritableEntity : : setArgument ( int i , bool v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-07-19 13:07:55 +00:00
}
void IfcWritableEntity : : setArgument ( int i , int v , const char * c ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , IfcWriteArgument : : EnumerationReference ( v , c ) ) ;
2012-07-19 13:07:55 +00:00
}
void IfcWritableEntity : : setArgument ( int i , const std : : string & v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-07-19 13:07:55 +00:00
}
void IfcWritableEntity : : setArgument ( int i , double v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-07-19 13:07:55 +00:00
}
2014-05-04 14:42:55 +00:00
void IfcWritableEntity : : setArgument ( int i , IfcUtil : : IfcBaseClass * v ) {
2013-08-04 04:49:08 +00:00
if ( v ) {
_setArgument ( i , v ) ;
} else {
_setArgument ( i , boost : : none ) ;
}
2012-07-19 13:07:55 +00:00
}
2014-05-04 14:42:55 +00:00
void IfcWritableEntity : : setArgument ( int i , IfcEntityList : : ptr v ) {
if ( v . get ( ) ) {
_setArgument ( i , v ) ;
} else {
_setArgument ( i , boost : : none ) ;
}
}
void IfcWritableEntity : : setArgument ( int i , IfcEntityListList : : ptr v ) {
2013-08-04 04:49:08 +00:00
if ( v . get ( ) ) {
_setArgument ( i , v ) ;
} else {
_setArgument ( i , boost : : none ) ;
}
2012-07-19 13:07:55 +00:00
}
void IfcWritableEntity : : setArgument ( int i , const std : : vector < double > & v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-07-19 13:07:55 +00:00
}
void IfcWritableEntity : : setArgument ( int i , const std : : vector < std : : string > & v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-07-19 13:07:55 +00:00
}
void IfcWritableEntity : : setArgument ( int i , const std : : vector < int > & v ) {
2013-08-04 04:49:08 +00:00
_setArgument ( i , v ) ;
2012-07-19 13:07:55 +00:00
}
2013-08-04 04:49:08 +00:00
class SizeVisitor : public boost : : static_visitor < int > {
public :
int operator ( ) ( const boost : : none_t & i ) const { return - 1 ; }
int operator ( ) ( const IfcWriteArgument : : Derived & i ) const { return - 1 ; }
int operator ( ) ( const int & i ) const { return - 1 ; }
int operator ( ) ( const bool & i ) const { return - 1 ; }
int operator ( ) ( const double & i ) const { return - 1 ; }
int operator ( ) ( const std : : string & i ) const { return i . size ( ) ; }
int operator ( ) ( const std : : vector < int > & i ) const { return i . size ( ) ; }
int operator ( ) ( const std : : vector < double > & i ) const { return i . size ( ) ; }
int operator ( ) ( const std : : vector < std : : string > & i ) const { return i . size ( ) ; }
int operator ( ) ( const IfcWriteArgument : : EnumerationReference & i ) const { return - 1 ; }
2014-05-04 14:42:55 +00:00
int operator ( ) ( const IfcUtil : : IfcBaseClass * const & i ) const { return - 1 ; }
int operator ( ) ( const IfcEntityList : : ptr & i ) const { return i - > Size ( ) ; }
int operator ( ) ( const IfcEntityListList : : ptr & i ) const { return i - > Size ( ) ; }
2013-08-04 04:49:08 +00:00
} ;
2012-11-10 09:36:34 +00:00
2013-08-04 04:49:08 +00:00
class StringBuilderVisitor : public boost : : static_visitor < void > {
private :
std : : ostringstream & data ;
template < typename T > void serialize ( const std : : vector < T > & i ) {
data < < " ( " ;
for ( typename std : : vector < T > : : const_iterator it = i . begin ( ) ; it ! = i . end ( ) ; + + it ) {
if ( it ! = i . begin ( ) ) data < < " , " ;
data < < * it ;
2012-07-19 13:07:55 +00:00
}
2013-08-04 04:49:08 +00:00
data < < " ) " ;
2012-07-19 13:07:55 +00:00
}
2013-08-04 04:49:08 +00:00
// The REAL token definition from the IFC SPF standard does not necessarily match
// the output of the C++ ostream formatting operation.
// REAL = [ SIGN ] DIGIT { DIGIT } "." { DIGIT } [ "E" [ SIGN ] DIGIT { DIGIT } ] .
std : : string format_double ( const double & d ) {
std : : ostringstream oss ;
2014-06-11 10:24:11 +00:00
oss < < std : : setprecision ( 16 ) < < d ;
2013-08-04 04:49:08 +00:00
const std : : string str = oss . str ( ) ;
oss . str ( " " ) ;
std : : string : : size_type e = str . find ( ' e ' ) ;
if ( e = = std : : string : : npos ) {
e = str . find ( ' E ' ) ;
}
const std : : string mantissa = str . substr ( 0 , e ) ;
oss < < mantissa ;
if ( mantissa . find ( ' . ' ) = = std : : string : : npos ) {
oss < < " . " ;
}
if ( e ! = std : : string : : npos ) {
oss < < " E " ;
oss < < str . substr ( e + 1 ) ;
}
return oss . str ( ) ;
2012-07-19 13:07:55 +00:00
}
2013-08-04 04:49:08 +00:00
void serialize_double ( const std : : vector < double > & i ) {
data < < " ( " ;
for ( std : : vector < double > : : const_iterator it = i . begin ( ) ; it ! = i . end ( ) ; + + it ) {
if ( it ! = i . begin ( ) ) data < < " , " ;
data < < format_double ( * it ) ;
}
data < < " ) " ;
2012-11-04 16:26:33 +00:00
}
2013-08-04 04:49:08 +00:00
bool upper ;
public :
StringBuilderVisitor ( std : : ostringstream & stream , bool upper = false )
: data ( stream ) , upper ( upper ) { }
void operator ( ) ( const boost : : none_t & i ) { data < < " $ " ; }
void operator ( ) ( const IfcWriteArgument : : Derived & i ) { data < < " * " ; }
void operator ( ) ( const int & i ) { data < < i ; }
void operator ( ) ( const bool & i ) { data < < ( i ? " .T. " : " .F. " ) ; }
void operator ( ) ( const double & i ) { data < < format_double ( i ) ; }
void operator ( ) ( const std : : string & i ) {
std : : string s = i ;
if ( upper ) s = IfcCharacterEncoder ( s ) ;
data < < s ;
2012-11-04 16:26:33 +00:00
}
2013-08-04 04:49:08 +00:00
void operator ( ) ( const std : : vector < int > & i ) { serialize ( i ) ; }
void operator ( ) ( const std : : vector < double > & i ) { serialize_double ( i ) ; }
void operator ( ) ( const std : : vector < std : : string > & i ) { serialize ( i ) ; }
void operator ( ) ( const IfcWriteArgument : : EnumerationReference & i ) {
data < < " . " < < i . enumeration_value < < " . " ;
2012-11-04 16:26:33 +00:00
}
2014-05-04 14:42:55 +00:00
void operator ( ) ( const IfcUtil : : IfcBaseClass * const & i ) {
2013-08-04 04:49:08 +00:00
IfcAbstractEntity * e = i - > entity ;
2014-02-17 22:13:55 +00:00
if ( IfcSchema : : Type : : IsSimple ( e - > type ( ) ) ) {
2013-08-04 04:49:08 +00:00
data < < e - > toString ( upper ) ;
2012-07-19 13:07:55 +00:00
} else {
2013-08-04 04:49:08 +00:00
data < < " # " < < e - > id ( ) ;
}
2012-07-19 13:07:55 +00:00
}
2014-05-04 14:42:55 +00:00
void operator ( ) ( const IfcEntityList : : ptr & i ) {
2013-08-04 04:49:08 +00:00
data < < " ( " ;
for ( IfcEntityList : : it it = i - > begin ( ) ; it ! = i - > end ( ) ; + + it ) {
if ( it ! = i - > begin ( ) ) data < < " , " ;
( * this ) ( * it ) ;
}
data < < " ) " ;
}
2014-05-04 14:42:55 +00:00
void operator ( ) ( const IfcEntityListList : : ptr & i ) {
data < < " ( " ;
for ( IfcEntityListList : : outer_it outer_it = i - > begin ( ) ; outer_it ! = i - > end ( ) ; + + outer_it ) {
data < < " ( " ;
if ( outer_it ! = i - > begin ( ) ) data < < " , " ;
for ( IfcEntityListList : : inner_it inner_it = outer_it - > begin ( ) ; inner_it ! = outer_it - > end ( ) ; + + inner_it ) {
if ( inner_it ! = outer_it - > begin ( ) ) data < < " , " ;
( * this ) ( * inner_it ) ;
}
data < < " ) " ;
}
data < < " ) " ;
}
2013-08-04 04:49:08 +00:00
operator std : : string ( ) { return data . str ( ) ; }
} ;
IfcWriteArgument : : operator int ( ) const { return as < int > ( ) ; }
IfcWriteArgument : : operator bool ( ) const { return as < bool > ( ) ; }
IfcWriteArgument : : operator double ( ) const { return as < double > ( ) ; }
IfcWriteArgument : : operator std : : string ( ) const { return as < std : : string > ( ) ; }
IfcWriteArgument : : operator std : : vector < double > ( ) const { return as < std : : vector < double > > ( ) ; }
IfcWriteArgument : : operator std : : vector < int > ( ) const { return as < std : : vector < int > > ( ) ; }
IfcWriteArgument : : operator std : : vector < std : : string > ( ) const { return as < std : : vector < std : : string > > ( ) ; }
2014-05-04 14:42:55 +00:00
IfcWriteArgument : : operator IfcUtil : : IfcBaseClass * ( ) const { return as < IfcUtil : : IfcBaseClass * > ( ) ; }
IfcWriteArgument : : operator IfcEntityList : : ptr ( ) const { return as < IfcEntityList : : ptr > ( ) ; }
IfcWriteArgument : : operator IfcEntityListList : : ptr ( ) const { throw ; }
2013-08-04 04:49:08 +00:00
bool IfcWriteArgument : : isNull ( ) const { return argumentType ( ) = = argument_type_null ; }
2014-05-04 14:42:55 +00:00
Argument * IfcWriteArgument : : operator [ ] ( unsigned int i ) const { throw IfcParse : : IfcException ( " Invalid cast " ) ; }
2013-08-04 04:49:08 +00:00
std : : string IfcWriteArgument : : toString ( bool upper ) const {
std : : ostringstream str ;
StringBuilderVisitor v ( str , upper ) ;
container . apply_visitor ( v ) ;
return v ;
}
unsigned int IfcWriteArgument : : Size ( ) const {
SizeVisitor v ;
const int size = container . apply_visitor ( v ) ;
if ( size = = - 1 ) {
throw IfcParse : : IfcException ( " Invalid cast " ) ;
} else {
return size ;
}
}
IfcWriteArgument : : argument_type IfcWriteArgument : : argumentType ( ) const {
return static_cast < argument_type > ( container . which ( ) ) ;
2012-07-19 13:07:55 +00:00
}
2014-11-02 18:36:51 +00:00
IfcUtil : : ArgumentType IfcWriteArgument : : type ( ) const {
// TODO: Make these the same enumeration
int ty = static_cast < int > ( container . which ( ) ) - 2 ;
if ( ty < 0 ) {
return IfcUtil : : Argument_UNKNOWN ;
} else {
2014-11-17 15:32:00 +00:00
return static_cast < IfcUtil : : ArgumentType > ( ty ) ;
2014-11-02 18:36:51 +00:00
}
}
2014-05-04 14:42:55 +00:00
IfcEntityList : : ptr IfcSelectHelperEntity : : getInverse ( IfcSchema : : Type : : Enum , int , const std : : string & ) { throw IfcParse : : IfcException ( " Invalid cast " ) ; }
IfcEntityList : : ptr IfcSelectHelperEntity : : getInverse ( IfcSchema : : Type : : Enum ) { throw IfcParse : : IfcException ( " Invalid cast " ) ; }
std : : string IfcSelectHelperEntity : : datatype ( ) const { return IfcSchema : : Type : : ToString ( _type ) ; }
Argument * IfcSelectHelperEntity : : getArgument ( unsigned int i ) {
2012-11-04 16:26:33 +00:00
if ( i ! = 0 ) throw IfcParse : : IfcException ( " Invalid cast " ) ;
2012-07-19 13:07:55 +00:00
return arg ;
}
2014-05-04 14:42:55 +00:00
unsigned int IfcSelectHelperEntity : : getArgumentCount ( ) const { return 1 ; }
2014-02-17 22:13:55 +00:00
IfcSchema : : Type : : Enum IfcSelectHelperEntity : : type ( ) const { return _type ; }
bool IfcSelectHelperEntity : : is ( IfcSchema : : Type : : Enum t ) const { return _type = = t ; }
2014-05-04 14:42:55 +00:00
std : : string IfcSelectHelperEntity : : toString ( bool upper ) const {
2012-07-19 13:07:55 +00:00
std : : stringstream ss ;
std : : string dt = datatype ( ) ;
if ( upper ) {
for ( std : : string : : iterator p = dt . begin ( ) ; p ! = dt . end ( ) ; + + p ) * p = toupper ( * p ) ;
}
ss < < dt < < " ( " < < arg - > toString ( upper ) < < " ) " ;
return ss . str ( ) ;
}
2012-11-04 16:26:33 +00:00
unsigned int IfcSelectHelperEntity : : id ( ) { throw IfcParse : : IfcException ( " Invalid cast " ) ; }
2014-11-02 18:36:51 +00:00
IfcWrite : : IfcWritableEntity * IfcSelectHelperEntity : : isWritable ( ) { throw IfcParse : : IfcException ( " Invalid cast " ) ; }
2012-07-19 13:07:55 +00:00
2014-02-17 22:13:55 +00:00
IfcSelectHelper : : IfcSelectHelper ( const std : : string & v , IfcSchema : : Type : : Enum t ) {
2013-08-04 04:49:08 +00:00
IfcWriteArgument * a = new IfcWriteArgument ( 0 ) ;
a - > set ( v ) ;
2012-07-19 13:07:55 +00:00
this - > entity = new IfcSelectHelperEntity ( t , a ) ;
}
2014-02-17 22:13:55 +00:00
IfcSelectHelper : : IfcSelectHelper ( const char * const v , IfcSchema : : Type : : Enum t ) {
2013-08-04 04:49:08 +00:00
IfcWriteArgument * a = new IfcWriteArgument ( 0 ) ;
a - > set < std : : string > ( v ) ;
2012-07-19 13:07:55 +00:00
this - > entity = new IfcSelectHelperEntity ( t , a ) ;
}
2014-02-17 22:13:55 +00:00
IfcSelectHelper : : IfcSelectHelper ( int v , IfcSchema : : Type : : Enum t ) {
2013-08-04 04:49:08 +00:00
IfcWriteArgument * a = new IfcWriteArgument ( 0 ) ;
a - > set ( v ) ;
2012-07-19 13:07:55 +00:00
this - > entity = new IfcSelectHelperEntity ( t , a ) ;
}
2014-02-17 22:13:55 +00:00
IfcSelectHelper : : IfcSelectHelper ( double v , IfcSchema : : Type : : Enum t ) {
2013-08-04 04:49:08 +00:00
IfcWriteArgument * a = new IfcWriteArgument ( 0 ) ;
a - > set ( v ) ;
2012-07-19 13:07:55 +00:00
this - > entity = new IfcSelectHelperEntity ( t , a ) ;
}
2014-02-17 22:13:55 +00:00
IfcSelectHelper : : IfcSelectHelper ( bool v , IfcSchema : : Type : : Enum t ) {
2013-08-04 04:49:08 +00:00
IfcWriteArgument * a = new IfcWriteArgument ( 0 ) ;
a - > set ( v ) ;
2012-07-19 13:07:55 +00:00
this - > entity = new IfcSelectHelperEntity ( t , a ) ;
}
2014-02-17 22:13:55 +00:00
bool IfcSelectHelper : : is ( IfcSchema : : Type : : Enum t ) const { return entity - > is ( t ) ; }
IfcSchema : : Type : : Enum IfcSelectHelper : : type ( ) const { return entity - > type ( ) ; }
2012-08-11 13:24:08 +00:00
EntityBuffer * EntityBuffer : : i = 0 ;
EntityBuffer * EntityBuffer : : instance ( ) {
if ( ! i ) {
i = new EntityBuffer ( ) ;
2014-05-04 14:42:55 +00:00
i - > buffer = IfcEntityList : : ptr ( new IfcEntityList ) ;
2012-08-11 13:24:08 +00:00
}
return i ;
}
2014-05-04 14:42:55 +00:00
IfcEntityList : : ptr EntityBuffer : : Get ( ) {
2012-08-11 13:24:08 +00:00
return instance ( ) - > buffer ;
}
void EntityBuffer : : Clear ( ) {
2014-05-04 14:42:55 +00:00
instance ( ) - > buffer = IfcEntityList : : ptr ( new IfcEntityList ) ;
2012-08-11 13:24:08 +00:00
}
2014-05-04 14:42:55 +00:00
void EntityBuffer : : Add ( IfcUtil : : IfcBaseClass * e ) {
2012-08-11 13:24:08 +00:00
instance ( ) - > buffer - > push ( e ) ;
}