blob: b3db97793d12758e239211081e709be767747190 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#ifndef TABLEOFDATA_H_
#define TABLEOFDATA_H_
#include <common/AvmPointer.h>
#include <common/AvmObject.h>
#include <collection/BFContainer.h>
namespace sep
{
class ArrayBF;
class BuiltinContainer;
class InstanceOfData;
class TableOfData :
public AvmObject,
public ArrayOfBF,
AVM_INJECT_INSTANCE_COUNTER_CLASS( TableOfData )
{
AVM_DECLARE_CLONABLE_CLASS( TableOfData )
public:
/**
* CONSTRUCTOR
* Default
*/
TableOfData(avm_size_t aSize)
: AvmObject( ),
ArrayOfBF( aSize )
{
//!! NOTHING
}
TableOfData(const BFVector & dataTable)
: AvmObject( ),
ArrayOfBF( dataTable )
{
//!! NOTHING
}
TableOfData(const TableOfData & aData)
: AvmObject( aData ),
ArrayOfBF( aData )
{
//!! NOTHING
}
virtual ~TableOfData()
{
//!! NOTHING
}
/**
* GETTER - SETTER
* for container of BF
*/
inline virtual BF & at(avm_size_t offset)
{
return( mTable[offset] );
}
inline virtual const BF & at(avm_size_t offset) const
{
return( mTable[offset] );
}
inline virtual BF & operator[](avm_size_t offset)
{
return( mTable[offset] );
}
inline virtual const BF & operator[](avm_size_t offset) const
{
return( mTable[offset] );
}
inline virtual BF & getWritable(avm_size_t offset) const
{
mTable[offset].makeWritable();
return( mTable[offset] );
}
inline virtual void makeWritable(avm_size_t offset) const
{
mTable[offset].makeWritable();
}
inline virtual void set(avm_size_t offset, const BF & bf) const
{
AVM_OS_ASSERT_FATAL_ARRAY_INDEX_EXIT( offset , mSize ) << SEND_EXIT;
mTable[offset] = bf;
}
/**
* GETTER - SETTER
* mTable
*/
const BF & get(const InstanceOfData * anInstance) const;
void set(const InstanceOfData * anInstance, const BF & aData) const;
/**
* Serialization
*/
inline virtual std::string toString(
const AvmIndent & indent = AVM_TAB_INDENT) const
{
StringOutStream oss(indent);
toStream(oss);
return( oss.str() );
}
inline std::string toString(const BFVector & vars,
const AvmIndent & indent = AVM_TAB_INDENT) const
{
StringOutStream oss(indent);
toStream(oss, vars);
return( oss.str() );
}
virtual void toStream(OutStream & os) const;
void toStream(OutStream & os, const BFVector & vars) const;
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// TYPE DEFINITION for SMART POINTER and CONTAINER
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
AVM_DEFINE_AP_CLASS( TableOfData )
}
#endif /*TABLEOFDATA_H_*/