Soar Kernel  9.3.2 08-06-12
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Data Structures | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Private Types | Private Member Functions | Private Attributes
soar_module::object_memory< T, N > Class Template Reference

#include <soar_module.h>

Inherited by soar_module::bla_object_memory< T, N, R >.

Data Structures

struct  object_history_struct
struct  object_time_reference_struct

Public Types

typedef uint64_t object_reference
typedef std::set< const T * > object_set
typedef uint64_t time_step

Public Member Functions

void forget ()
object_set::iterator forgotten_begin ()
object_set::iterator forgotten_end ()
void initialize ()
 object_memory ()
void process_buffered_references ()
bool reference_object (const T *obj, object_reference num)
void remove_object (const T *obj)
void teardown ()
void time_back ()
void time_forward ()

Protected Types

typedef struct
soar_module::object_memory::object_history_struct 
object_history
typedef struct
soar_module::object_memory::object_time_reference_struct 
object_time_reference

Protected Member Functions

virtual void _down ()=0
virtual void _init ()=0
virtual time_step estimate_forgetting_time (const object_history *h, time_step t, bool fresh_reference)=0
time_step get_current_time ()
const object_historyget_history (const T *obj)
unsigned int history_next (unsigned int current)
unsigned int history_prev (unsigned int current)
bool is_initialized ()
virtual bool should_forget (const object_history *h, time_step t)=0

Private Types

typedef std::map< time_step,
history_set
forgetting_map
typedef std::set
< object_history * > 
history_set
typedef std::map< const T
*, object_history
object_history_map
typedef std::set< time_steptime_set

Private Member Functions

void add_to_pq (object_history *h, time_step t)
void move_in_pq (object_history *h, time_step new_t)
void remove_from_pq (object_history *h)

Private Attributes

forgetting_map forgetting_pq
object_set forgotten
bool initialized
object_history_map object_histories
time_step step_count
history_set touched_histories
time_set touched_times

Detailed Description

template<class T, int N>
class soar_module::object_memory< T, N >

Definition at line 1065 of file soar_module.h.

Member Typedef Documentation

template<class T , int N>
typedef std::map< time_step, history_set > soar_module::object_memory< T, N >::forgetting_map
private

Definition at line 1137 of file soar_module.h.

template<class T , int N>
typedef std::set< object_history* > soar_module::object_memory< T, N >::history_set
private

Definition at line 1135 of file soar_module.h.

template<class T , int N>
typedef struct soar_module::object_memory::object_history_struct soar_module::object_memory< T, N >::object_history
protected
template<class T , int N>
typedef std::map< const T*, object_history > soar_module::object_memory< T, N >::object_history_map
private

Definition at line 1134 of file soar_module.h.

template<class T , int N>
typedef uint64_t soar_module::object_memory< T, N >::object_reference

Definition at line 1069 of file soar_module.h.

template<class T , int N>
typedef std::set< const T* > soar_module::object_memory< T, N >::object_set

Definition at line 1071 of file soar_module.h.

template<class T , int N>
typedef std::set< time_step > soar_module::object_memory< T, N >::time_set
private

Definition at line 1136 of file soar_module.h.

template<class T , int N>
typedef uint64_t soar_module::object_memory< T, N >::time_step

Definition at line 1068 of file soar_module.h.

Constructor & Destructor Documentation

template<class T , int N>
soar_module::object_memory< T, N >::object_memory ( )
inline

Definition at line 1170 of file soar_module.h.

: initialized( false )
{
}

Member Function Documentation

template<class T , int N>
virtual void soar_module::object_memory< T, N >::_down ( )
protectedpure virtual
template<class T , int N>
virtual void soar_module::object_memory< T, N >::_init ( )
protectedpure virtual
template<class T , int N>
void soar_module::object_memory< T, N >::add_to_pq ( object_history h,
time_step  t 
)
inlineprivate
template<class T , int N>
virtual time_step soar_module::object_memory< T, N >::estimate_forgetting_time ( const object_history h,
time_step  t,
bool  fresh_reference 
)
protectedpure virtual
template<class T , int N>
void soar_module::object_memory< T, N >::forget ( )
inline

Definition at line 1299 of file soar_module.h.

References soar_module::object_memory< T, N >::estimate_forgetting_time(), soar_module::object_memory< T, N >::forgetting_pq, soar_module::object_memory< T, N >::forgotten, soar_module::object_memory< T, N >::move_in_pq(), soar_module::object_memory< T, N >::remove_from_pq(), soar_module::object_memory< T, N >::should_forget(), soar_module::object_memory< T, N >::step_count, and soar_module::object_memory< T, N >::touched_times.

Referenced by do_one_top_level_phase().

{
forgotten.clear();
if ( !forgetting_pq.empty() )
{
typename forgetting_map::iterator pq_p = forgetting_pq.begin();
// check if we even have to do anything this time step
if ( pq_p->first == step_count )
{
typename history_set::iterator d_p=pq_p->second.begin();
typename history_set::iterator current_p;
while ( d_p != pq_p->second.end() )
{
current_p = d_p++;
if ( should_forget( *current_p, step_count ) )
{
forgotten.insert( (*current_p)->this_object );
remove_from_pq( *current_p );
}
else
{
move_in_pq( *current_p, estimate_forgetting_time( *current_p, step_count, false ) );
}
}
// clean up set
touched_times.insert( pq_p->first );
pq_p->second.clear();
}
// clean up touched time sets
for ( time_set::iterator t_p=touched_times.begin(); t_p!=touched_times.end(); t_p++ )
{
pq_p = forgetting_pq.find( *t_p );
if ( ( pq_p != forgetting_pq.end() ) && pq_p->second.empty() )
{
forgetting_pq.erase( pq_p );
}
}
touched_times.clear();
}
}
template<class T , int N>
object_set::iterator soar_module::object_memory< T, N >::forgotten_begin ( )
inline

Definition at line 1289 of file soar_module.h.

References soar_module::object_memory< T, N >::forgotten.

Referenced by do_one_top_level_phase().

{
return forgotten.begin();
}
template<class T , int N>
object_set::iterator soar_module::object_memory< T, N >::forgotten_end ( )
inline

Definition at line 1294 of file soar_module.h.

References soar_module::object_memory< T, N >::forgotten.

Referenced by do_one_top_level_phase().

{
return forgotten.end();
}
template<class T , int N>
time_step soar_module::object_memory< T, N >::get_current_time ( )
inlineprotected
template<class T , int N>
const object_history* soar_module::object_memory< T, N >::get_history ( const T *  obj)
inlineprotected

Definition at line 1140 of file soar_module.h.

References soar_module::object_memory< T, N >::object_histories.

Referenced by soar_module::bla_object_memory< T, N, R >::get_object_activation().

{
typename object_history_map::iterator p = object_histories.find( obj );
if ( p != object_histories.end() )
{
return &( p->second );
}
else
{
return NULL;
}
}
template<class T , int N>
unsigned int soar_module::object_memory< T, N >::history_next ( unsigned int  current)
inlineprotected

Definition at line 1123 of file soar_module.h.

Referenced by soar_module::object_memory< T, N >::process_buffered_references().

{
return ( ( current == ( N - 1 ) )?( 0 ):( current + 1 ) );
}
template<class T , int N>
unsigned int soar_module::object_memory< T, N >::history_prev ( unsigned int  current)
inlineprotected

Definition at line 1128 of file soar_module.h.

Referenced by soar_module::bla_object_memory< T, N, R >::compute_history_activation(), and soar_module::bla_object_memory< T, N, R >::estimate_forgetting_time().

{
return ( ( current == 0 )?( N - 1 ):( current - 1 ) );
}
template<class T , int N>
void soar_module::object_memory< T, N >::initialize ( )
inline
template<class T , int N>
bool soar_module::object_memory< T, N >::is_initialized ( )
inlineprotected
template<class T , int N>
void soar_module::object_memory< T, N >::move_in_pq ( object_history h,
time_step  new_t 
)
inlineprivate
template<class T , int N>
void soar_module::object_memory< T, N >::process_buffered_references ( )
inline

Definition at line 1240 of file soar_module.h.

References soar_module::object_memory< T, N >::add_to_pq(), soar_module::object_memory< T, N >::object_history_struct::buffered_references, soar_module::object_memory< T, N >::object_history_struct::decay_step, soar_module::object_memory< T, N >::estimate_forgetting_time(), soar_module::object_memory< T, N >::object_history_struct::first_reference, soar_module::object_memory< T, N >::object_history_struct::history_ct, soar_module::object_memory< T, N >::history_next(), soar_module::object_memory< T, N >::object_history_struct::history_references, soar_module::object_memory< T, N >::move_in_pq(), soar_module::object_memory< T, N >::object_history_struct::next_p, soar_module::object_memory< T, N >::object_time_reference_struct::num_references, soar_module::object_memory< T, N >::object_history_struct::reference_history, soar_module::object_memory< T, N >::step_count, soar_module::object_memory< T, N >::object_time_reference_struct::t_step, soar_module::object_memory< T, N >::object_history_struct::total_references, and soar_module::object_memory< T, N >::touched_histories.

Referenced by do_one_top_level_phase().

{
typename history_set::iterator h_p;
// add to history for changed histories
for ( h_p=touched_histories.begin(); h_p!=touched_histories.end(); h_p++ )
{
h = *h_p;
// update number of references in the current history
// (has to come before history overwrite)
h->history_references += ( h->buffered_references - h->reference_history[ h->next_p ].num_references );
// set history
h->reference_history[ h->next_p ].t_step = step_count;
h->reference_history[ h->next_p ].num_references = h->buffered_references;
// keep track of first reference
if ( h->total_references == 0 )
{
h->first_reference = step_count;
}
// update counters
if ( h->history_ct < N )
{
h->history_ct++;
}
h->next_p = history_next( h->next_p );
h->total_references += h->buffered_references;
// reset buffer counter
h->buffered_references = 0;
// update p-queue
if ( h->decay_step != 0 )
{
}
else
{
}
}
}
template<class T , int N>
bool soar_module::object_memory< T, N >::reference_object ( const T *  obj,
object_reference  num 
)
inline

Definition at line 1203 of file soar_module.h.

References soar_module::object_memory< T, N >::object_history_struct::buffered_references, soar_module::object_memory< T, N >::object_histories, and soar_module::object_memory< T, N >::touched_histories.

Referenced by retract_instantiation().

{
object_history* h = NULL;
bool return_val = false;
typename object_history_map::iterator p = object_histories.find( obj );
if ( p != object_histories.end() )
{
h = &( p->second );
}
else
{
std::pair< typename object_history_map::iterator, bool > ip = object_histories.insert( std::make_pair< const T*, object_history >( obj, object_history( obj ) ) );
assert( ip.second );
h = &( ip.first->second );
return_val = true;
}
h->buffered_references += num;
touched_histories.insert( h );
return return_val;
}
template<class T , int N>
void soar_module::object_memory< T, N >::remove_from_pq ( object_history h)
inlineprivate

Definition at line 1367 of file soar_module.h.

References soar_module::object_memory< T, N >::object_history_struct::decay_step, soar_module::object_memory< T, N >::forgetting_pq, and soar_module::object_memory< T, N >::touched_times.

Referenced by soar_module::object_memory< T, N >::forget(), soar_module::object_memory< T, N >::move_in_pq(), and soar_module::object_memory< T, N >::remove_object().

{
if ( h->decay_step )
{
typename forgetting_map::iterator f_p = forgetting_pq.find( h->decay_step );
if ( f_p != forgetting_pq.end() )
{
f_p->second.erase( h );
touched_times.insert( h->decay_step );
}
h->decay_step = 0;
}
}
template<class T , int N>
void soar_module::object_memory< T, N >::remove_object ( const T *  obj)
inline

Definition at line 1229 of file soar_module.h.

References soar_module::object_memory< T, N >::object_histories, soar_module::object_memory< T, N >::remove_from_pq(), and soar_module::object_memory< T, N >::touched_histories.

Referenced by excise_production().

{
typename object_history_map::iterator p = object_histories.find( obj );
if ( p != object_histories.end() )
{
touched_histories.erase( &( p->second ) );
remove_from_pq( &( p->second ) );
object_histories.erase( p );
}
}
template<class T , int N>
virtual bool soar_module::object_memory< T, N >::should_forget ( const object_history h,
time_step  t 
)
protectedpure virtual
template<class T , int N>
void soar_module::object_memory< T, N >::teardown ( )
inline
template<class T , int N>
void soar_module::object_memory< T, N >::time_back ( )
inline

Definition at line 1352 of file soar_module.h.

References soar_module::object_memory< T, N >::step_count.

{
}
template<class T , int N>
void soar_module::object_memory< T, N >::time_forward ( )
inline

Definition at line 1347 of file soar_module.h.

References soar_module::object_memory< T, N >::step_count.

Referenced by do_one_top_level_phase().

{
}

Field Documentation

template<class T , int N>
forgetting_map soar_module::object_memory< T, N >::forgetting_pq
private
template<class T , int N>
object_set soar_module::object_memory< T, N >::forgotten
private
template<class T , int N>
bool soar_module::object_memory< T, N >::initialized
private
template<class T , int N>
object_history_map soar_module::object_memory< T, N >::object_histories
private
template<class T , int N>
time_step soar_module::object_memory< T, N >::step_count
private
template<class T , int N>
history_set soar_module::object_memory< T, N >::touched_histories
private
template<class T , int N>
time_set soar_module::object_memory< T, N >::touched_times
private

The documentation for this class was generated from the following file: