9 #ifndef BSCRIPT_BOBJECT_H 10 #define BSCRIPT_BOBJECT_H 13 #define BOBJECTIMP_DEBUG 0 15 #define BOBJECTIMP_DEBUG 1 19 #define INLINE_BOBJECTIMP_CTOR 0 21 #define INLINE_BOBJECTIMP_CTOR 1 24 #include <format/format.h> 26 #include "../clib/fixalloc.h" 27 #include "../clib/passert.h" 28 #include "../clib/rawtypes.h" 29 #include "../clib/refptr.h" 30 #include "../clib/spinlock.h" 32 #if INLINE_BOBJECTIMP_CTOR 118 #if INLINE_BOBJECTIMP_CTOR 146 virtual const char*
typeOf()
const;
150 virtual std::string
pack()
const;
151 virtual void packonto( std::ostream& os )
const;
152 virtual void printOn( std::ostream& )
const;
308 virtual char str_member(
const std::string& membername )
const;
322 virtual bool isTrue()
const;
355 return ( type ==
type_ );
373 void*
operator new( std::size_t len );
374 void operator delete(
void* );
384 bool isTrue()
const {
return objimp->isTrue(); }
394 void printOn( std::ostream& )
const;
413 inline void* BObject::operator
new( std::size_t )
418 inline void BObject::operator
delete(
void* p )
425 return objimp->isa( type );
472 virtual
std::
string getStringRep() const POL_OVERRIDE {
return "<uninitialized object>"; }
479 void*
operator new( std::size_t len );
480 void operator delete(
void* );
485 SharedInstanceOwner.
clear();
486 SharedInstance = NULL;
491 inline void* UninitObject::operator
new( std::size_t )
496 inline void UninitObject::operator
delete(
void* p )
507 typedef std::vector<BObjectRef>
Cont;
540 bool forcebuiltin = false ) POL_OVERRIDE;
542 bool copy ) POL_OVERRIDE;
547 const
BObjectImp* imp_at(
unsigned index ) const;
550 virtual
void printOn(
std::ostream& os ) const POL_OVERRIDE;
556 virtual
bool operator==( const
BObjectImp& objimp ) const POL_OVERRIDE;
571 explicit BLong(
int lval = 0L );
574 explicit BLong(
int lval = 0L ) : BObjectImp(
OTLong ), lval_( static_cast<int>( lval ) ) {}
581 void*
operator new( std::size_t len );
582 void operator delete(
void* );
583 void operator delete(
void*, size_t );
585 static BObjectImp*
unpack(
const char* pstr );
586 static BObjectImp*
unpack( std::istream& is );
588 static std::string
pack(
int val );
597 virtual BObjectImp*
inverse() const POL_OVERRIDE {
return new BLong( -lval_ ); }
677 inline void* BLong::operator
new( std::size_t len )
683 inline void BLong::operator
delete(
void* p )
687 inline void BLong::operator
delete(
void* p,
size_t )
704 void*
operator new( std::size_t len );
705 void operator delete(
void* );
713 double value()
const {
return dval_; }
718 virtual bool isTrue() const POL_OVERRIDE {
return ( dval_ != 0.0 ); }
764 inline void* Double::operator
new( std::size_t len )
770 inline void Double::operator
delete(
void* p )
781 explicit BBoolean(
bool bval =
false );
796 bool value()
const {
return bval_; }
815 BFunctionRef(
int progcounter,
int param_count,
const std::string& scriptname );
911 const T& value()
const;
914 virtual const char*
typeOf()
const POL_OVERRIDE = 0;
virtual BObjectImp * selfBitShiftRightObjImp(const BObjectImp &objimp) const
virtual BObjectImp * selfBitOrObj(const BObjectImp &objimp) const
virtual BObjectRef get_member(const char *membername)
virtual void printOn(std::ostream &) const
std::atomic< int > eobject_imp_count
Clib::fixed_allocator< sizeof(Double), 256 > double_alloc
virtual std::string getStringRep() const =0
virtual BObjectImp * bitnot() const
virtual BObjectImp * selfBitAndObjImp(const BObjectImp &objimp) const
std::vector< std::string > NameCont
virtual BObjectImp * selfTimesObj(const BObjectImp &objimp) const
bool isa(BObjectType type) const
virtual BObjectImp * selfBitOrObjImp(const BObjectImp &objimp) const
void copyvalue(const BLong &ni)
virtual BObjectImp * selfBitXorObj(const BObjectImp &objimp) const
virtual BObjectImp * selfBitShiftRightObj(const BObjectImp &objimp) const
virtual long contains(const BObjectImp &objimp) const
const BApplicObjType * pointer_type_
std::atomic< int > eobject_imp_constructions
Double(const Double &dbl)
virtual BObjectImp * inverse() const POL_OVERRIDE
virtual BObjectImp * inverse() const
ref_counted & operator=(const ref_counted &)
virtual BObjectImp * copy() const =0
virtual bool operator!=(const BObjectImp &objimp) const
virtual BObjectImp * selfBitShiftLeftObj(const BObjectImp &objimp) const
virtual u8 typeOfInt() const
virtual void operInsertInto(BObject &obj, const BObjectImp &objimp)
unsigned int instance() const
bool isa(BObjectImp::BObjectType type) const
virtual char member(const BObject &obj) const
NameCont::iterator name_iterator
virtual void operModulusEqual(BObject &obj, BObjectImp &objimp)
Clib::fixed_allocator< sizeof(BLong), 256 > blong_alloc
virtual BObjectImp * selfBitAndObj(const BObjectImp &objimp) const
virtual std::string pack() const
virtual BObjectRef operDotPlus(const char *name)
BObjectRef(BObject *pobj=NULL)
static void ReleaseSharedInstance()
virtual BObjectImp * copy() const POL_OVERRIDE
virtual size_t sizeEstimate() const POL_OVERRIDE=0
void copyvalue(const Double &dbl)
const BApplicObjType * object_type() const
Cont::const_iterator const_iterator
virtual void operDivideEqual(BObject &obj, BObjectImp &objimp)
virtual BObjectImp * selfBitShiftLeftObjImp(const BObjectImp &objimp) const
virtual size_t sizeEstimate() const POL_OVERRIDE
void setimp(BObjectImp *imp)
virtual bool operator==(const BObjectImp &objimp) const
virtual bool isTrue() const
virtual BObjectRef get_member_id(const int id)
virtual BObjectRef set_member(const char *membername, BObjectImp *valueimp, bool copy)
virtual BObjectImp * selfDividedByObj(const BObjectImp &objimp) const
virtual BObjectImp * inverse() const POL_OVERRIDE
Clib::fixed_allocator< sizeof(UninitObject), 256 > uninit_alloc
virtual bool operator<(const BObjectImp &objimp) const
BApplicObjBase(const BApplicObjType *object_type)
BObjectImp * operator->() const
virtual void operPlusEqual(BObject &obj, BObjectImp &objimp)
static Clib::SpinLock bobjectimp_lock
virtual bool operator<=(const BObjectImp &objimp) const
virtual BObjectRef OperSubscript(const BObject &obj)
virtual ContIterator * createIterator(BObject *pIterVal)
std::vector< BObjectRef > Cont
static UninitObject * create()
virtual std::string getFormattedStringRep() const
virtual void operMinusEqual(BObject &obj, BObjectImp &objimp)
static BObjectImp * unpack(const char *pstr)
virtual BObjectRef set_member_id(const int id, BObjectImp *valueimp, bool copy)
virtual BObjectImp * call_method(const char *methodname, Executor &ex)
virtual BObjectImp * call_method_id(const int id, Executor &ex, bool forcebuiltin=false)
virtual bool isTrue() const POL_OVERRIDE
ref_ptr< BObjectImp > objimp
virtual bool operator>(const BObjectImp &objimp) const
BApplicObj(const BApplicObjType *object_type)
BObject(const BObject &obj)
const BApplicObjType * object_type_
virtual BObjectImp * selfMinusObjImp(const BObjectImp &objimp) const
virtual BObjectRef operDotQMark(const char *name)
virtual BObjectRef OperMultiSubscript(std::stack< BObjectRef > &indices)
virtual void packonto(std::ostream &os) const
virtual BObjectImp * selfTimesObjImp(const BObjectImp &objimp) const
virtual BObjectImp * copy() const POL_OVERRIDE=0
BObjectRef(BObjectImp *pimp)
virtual BObjectRef OperMultiSubscriptAssign(std::stack< BObjectRef > &indices, BObjectImp *target)
virtual BObjectImp * selfMinusObj(const BObjectImp &objimp) const
static ref_ptr< BObjectImp > SharedInstanceOwner
friend std::ostream & operator<<(std::ostream &, const BObjectImp &)
NameCont::const_iterator const_name_iterator
virtual BObjectImp * selfModulusObjImp(const BObjectImp &objimp) const
virtual size_t sizeEstimate() const =0
BObjectImp(BObjectType type)
virtual BObjectImp * selfBitXorObjImp(const BObjectImp &objimp) const
std::vector< ref_ptr< BObjectImp > > BObjectImpRefVec
virtual BObjectImp * selfModulusObj(const BObjectImp &objimp) const
virtual BObjectRef operDotMinus(const char *name)
Clib::fixed_allocator< sizeof(BObject), 256 > bobject_alloc
virtual BObjectImp * array_assign(BObjectImp *idx, BObjectImp *target, bool copy)
#define passert_paranoid(exp)
virtual BObjectImp * selfDividedByObjImp(const BObjectImp &objimp) const
virtual char str_member(const std::string &membername) const
virtual const char * typeOf() const
virtual bool operator>=(const BObjectImp &objimp) const
static const char * typestr(BObjectType typ)
static UninitObject * SharedInstance
virtual BObjectImp * selfPlusObj(const BObjectImp &objimp) const
virtual void operTimesEqual(BObject &obj, BObjectImp &objimp)
virtual BObjectImp * selfPlusObjImp(const BObjectImp &objimp) const
BObject(BObjectImp *objimp)
static unsigned int instances_
virtual BObject operator-() const