Show
Ignore:
Timestamp:
07/12/11 14:36:32 (23 months ago)
Author:
jeremyz
Message:

start cleaning Pattern class

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/core/src/basics/pattern.cpp

    r2259 r2261  
    2222 
    2323#include <hydrogen/basics/pattern.h> 
    24 #include <hydrogen/basics/song.h> 
     24 
     25#include <cassert> 
     26 
    2527#include <hydrogen/basics/note.h> 
    2628#include <hydrogen/audio_engine.h> 
    2729 
    28 #include <vector> 
    29 #include <cassert> 
    3030namespace H2Core 
    3131{ 
     
    3333const char* Pattern::__class_name = "Pattern"; 
    3434 
    35 Pattern::Pattern( const QString& name, const QString& category, unsigned length ) 
     35Pattern::Pattern( const QString& name, const QString& category, int length ) 
    3636    : Object( __class_name ) 
     37    , __length( length ) 
     38    , __name( name ) 
     39    , __category( category ) 
    3740{ 
    38 //      INFOLOG( "INIT: " + m_sName ); 
    39     set_name( name ); 
    40     set_category( category ); 
    41     set_length( length ); 
    4241} 
    4342 
    4443Pattern::Pattern( Pattern* other) 
    4544    : Object( __class_name ) 
     45    , __length( other->get_length() ) 
     46    , __name( other->get_name() ) 
     47    , __category( other->get_category() ) 
    4648{ 
    47     // TODO 
     49    std::multimap <int, Note*>::const_iterator pos; 
     50    for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 
     51        note_map.insert( std::make_pair( pos->first, new Note( pos->second ) ) ); 
     52    } 
    4853} 
    49  
    5054 
    5155Pattern::~Pattern() 
    5256{ 
    53 //      INFOLOG( "DESTROY: " + m_sName ); 
    54  
    55     // delete all Notes 
    56     std::multimap <int, Note*>::iterator pos; 
    57     for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 
    58         Note* pNote = pos->second; 
    59         delete pNote; 
     57    std::multimap <int, Note*>::const_iterator pos; 
     58    for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 
     59        delete pos->second; 
    6060    } 
    6161} 
    6262 
     63bool Pattern::references( Instrument* instr ) 
     64{ 
     65    std::multimap <int, Note*>::const_iterator pos; 
     66    for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 
     67        Note *note = pos->second; 
     68        assert( note ); 
     69        if ( note->get_instrument() == instr ) { 
     70            return true; 
     71        } 
     72    } 
     73    return false; 
     74} 
    6375 
    64 void Pattern::purge_instrument( Instrument* I ) 
     76void Pattern::purge_instrument( Instrument* instr ) 
    6577{ 
    6678    bool locked = false; 
    6779    std::list< Note* > slate; 
    68  
    69     std::multimap <int, Note*>::iterator pos = note_map.begin(); 
    70     while ( pos != note_map.end() ) { 
    71         Note* pNote = pos->second; 
    72         assert( pNote ); 
    73  
    74         if ( pNote->get_instrument() == I ) { 
     80    std::multimap <int, Note*>::iterator pos; 
     81    for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 
     82        Note* note = pos->second; 
     83        assert( note ); 
     84        if ( note->get_instrument() == instr ) { 
    7585            if ( !locked ) { 
    7686                H2Core::AudioEngine::get_instance()->lock( RIGHT_HERE ); 
    7787                locked = true; 
    7888            } 
    79             slate.push_back( pNote ); 
    80  
    81             note_map.erase( pos++ ); 
    82         } else { 
    83             ++pos; 
     89            slate.push_back( note ); 
     90            note_map.erase( pos ); 
    8491        } 
    8592    } 
    86  
    8793    if ( locked ) { 
    8894        H2Core::AudioEngine::get_instance()->unlock(); 
     
    94100} 
    95101 
    96  
    97 bool Pattern::references_instrument( Instrument* I ) 
    98 { 
     102void Pattern::set_to_old() { 
    99103    std::multimap <int, Note*>::const_iterator pos; 
    100     for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 
    101         Note* pNote = pos->second; 
    102         assert( pNote ); 
    103         if ( pNote->get_instrument() == I ) { 
    104             return true; 
    105         } 
    106     } 
    107     return false; 
    108 } 
    109  
    110  
    111 void Pattern::set_to_old() 
    112 { 
    113     std::multimap <int, Note*>::const_iterator pos; 
    114     for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 
    115         Note* pNote = pos->second; 
    116         assert( pNote ); 
    117         pNote->set_just_recorded( false ); 
     104    for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 
     105        Note *note = pos->second; 
     106        assert( note ); 
     107        note->set_just_recorded( false ); 
    118108    } 
    119109} 
    120110 
     111}; 
    121112 
    122 /// Returns an empty Pattern 
    123 Pattern* Pattern::get_empty_pattern() 
    124 { 
    125     Pattern* pat = new Pattern( "Pattern", "not_categorized" ); 
    126     return pat; 
    127 } 
    128  
    129  
    130  
    131 Pattern* Pattern::copy() 
    132 { 
    133 //      ERRORLOG( "not implemented yet!!!" ); 
    134  
    135     Pattern* newPat = new Pattern( __name, __category ); 
    136     newPat->set_length( get_length() ); 
    137  
    138     std::multimap <int, Note*>::iterator pos; 
    139     for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 
    140         Note* pNote = new Note( pos->second ); 
    141         newPat->note_map.insert( std::make_pair( pos->first, pNote ) ); 
    142     } 
    143  
    144     return newPat; 
    145 } 
    146  
    147  
    148  
    149 void Pattern::debug_dump() 
    150 { 
    151     INFOLOG( "Pattern dump" ); 
    152     INFOLOG( "Pattern name: " + __name ); 
    153     INFOLOG( "Pattern category: " + __category ); 
    154     INFOLOG( QString( "Pattern length: %1" ).arg( get_length() ) ); 
    155 } 
    156  
    157 }; 
     113/* vim: set softtabstop=4 expandtab: */