Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

vector.cpp

Committer:
klauss
Date:
2015-11-24
Revision:
137:32dd35a6dbc9
Parent:
135:2f4290590e51

File content as of revision 137:32dd35a6dbc9:

#include "vector.h"

Vector::Vector ()
{
    this -> objects = NULL;
    this -> elements = 0;
}

Vector::~Vector ()
{
    if ( this -> objects != NULL ) free ( this -> objects );  
}

void Vector::add ( Object * e )
{
    if ( e != NULL )
    {
        this -> objects = ( Object ** ) realloc ( this -> objects, sizeof ( Object * ) * ++( this -> elements ) );
        if ( this -> objects == NULL )
        {
            memory_is_over = true;
            if ( debug_memory ) vz_debug ( "Vector add fail" );
        } else {
            this -> objects [ this -> elements - 1 ] = e;
        }
    }
}

Object * Vector::get_element ( int position )
{
    return ( position > -1 && position < this->elements ) ? ( Object * ) * ( this -> objects + position ) : NULL;
}

void Vector::remove_element ( int position )
{
    if ( debug_vector ) vz_debug ( "Removing element %d", position );
    if ( position > -1 && position < this -> elements )
    {
        if ( position == 0 && this -> elements == 1 )
        {
            this -> elements = 0;
            free ( this -> objects );
            this -> objects = NULL;
        } else {
            this -> objects [ position ] = this -> objects[ -- ( this -> elements ) ];
            this -> objects = ( Object ** ) realloc ( this -> objects, sizeof ( Object * ) * this -> elements );
            if ( this -> objects == NULL ) memory_is_over = true;
            if ( debug_memory ) vz_debug ( "Resize Vector fail" );
        }
    }
    if ( debug_vector ) vz_debug ( "Removed" );
}

int Vector::size ( void ) { return this -> elements; }

int Vector::print_yourself ( void )
{   
    vz_printf ("\r\n");
    vz_printf ("Elements :: %d ( %p )", this -> elements, &( this->elements ) );   
    vz_printf ("Values ::\r\n");
    
    if ( this -> elements == 0 )
    {
        vz_printf ( "Objects :: %p", this -> objects );
    }
        else
    {
        for ( register int i = 0; i < this -> elements; i++ )
        {
            vz_printf ("[ %i ] :: %p", i, ( this -> objects +  i ) );
        }
    }
    vz_printf ("\r\n");
    
    return ( sizeof ( Vector ) );
}