Changeset 959c82 for src/CodePatterns


Ignore:
Timestamp:
Oct 30, 2015, 11:43:20 AM (10 years ago)
Author:
Frederik Heber <heber@…>
Children:
1f96ec
Parents:
e24dde
git-author:
Frederik Heber <heber@…> (07/04/15 22:33:12)
git-committer:
Frederik Heber <heber@…> (10/30/15 11:43:20)
Message:

Extracted all static Observable maps (and mutex) into singleton GlobalObservableInfo.

  • this way we may safely control is destruction, i.e. it is always valid as it boils down to a primitive void pointer which does not need to be destroyed or constructed.
  • Minimized code where mutex is locked.
Location:
src/CodePatterns
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • src/CodePatterns/Cacheable.hpp

    re24dde r959c82  
    197197    if (owner != NULL) {
    198198      if (channels.empty()) {
    199         owner->signOn(this,Observable::PriorityLevel(int(-20)));
     199        owner->signOn(this,GlobalObservableInfo::PriorityLevel(int(-20)));
    200200      } else {
    201201        for (Observable::channels_t::const_iterator iter = channels.begin();
    202202            iter != channels.end(); ++iter)
    203           owner->signOn(this,*iter,Observable::PriorityLevel(int(-20)));
     203          owner->signOn(this,*iter,GlobalObservableInfo::PriorityLevel(int(-20)));
    204204      }
    205205    }
  • src/CodePatterns/ObservedValue.hpp

    re24dde r959c82  
    151151  if ((owner != NULL) && (!signedOn)) {
    152152    if (channels.empty()) {
    153       owner->signOn(this,Observable::PriorityLevel(int(-20)));
     153      owner->signOn(this,GlobalObservableInfo::PriorityLevel(int(-20)));
    154154    } else {
    155155      for (Observable::channels_t::const_iterator iter = channels.begin();
  • src/CodePatterns/Observer/Observable.hpp

    re24dde r959c82  
    1818#include <string>
    1919#include <boost/function.hpp>
    20 #include <boost/thread.hpp>
    2120
    2221#include "CodePatterns/Range.hpp"
    2322#include "CodePatterns/Observer/defs.hpp"
     23#include "CodePatterns/Observer/GlobalObservableInfo.hpp"
    2424#include "CodePatterns/Observer/Observer.hpp"
    2525
    2626class Graveyard;
     27class scoped_lock;
    2728
    2829/**
     
    4849  typedef std::vector<size_t> channels_t;
    4950
    50   Observable(std::string _name, const channels_t &_channels = channels_t());
     51  Observable(
     52      std::string _name,
     53      const channels_t &_channels = channels_t());
    5154  virtual ~Observable();
    52 
    53   /** This class is only used to distinguish from size_t in the overload.
    54    *
    55    * It encapsulates a const int (the priority level) and checks valid bounds
    56    * in constructor.
    57    *
    58    */
    59   class PriorityLevel {
    60   public:
    61     explicit PriorityLevel(const int i);
    62     ~PriorityLevel();
    63 
    64     const int level;
    65   private:
    66     static range<int> ValidRange;
    67   };
    6855
    6956private:
     
    9279   * ussually no need to order the update sequence.
    9380   */
    94   virtual void signOn(Observer *target, PriorityLevel priority = PriorityDefault) const;
     81  virtual void signOn(
     82      Observer * target,
     83      GlobalObservableInfo::PriorityLevel priority = GlobalObservableInfo::PriorityDefault) const;
    9584
    9685  /**
     
    10695      Observer *target,
    10796      size_t channelno,
    108       PriorityLevel priority = PriorityDefault) const;
     97      GlobalObservableInfo::PriorityLevel priority =
     98          GlobalObservableInfo::PriorityDefault) const;
    10999
    110100  /**
     
    143133  static void enque_notification_internal(Observable *publisher, Notification_ptr notification);
    144134
     135protected:
     136
    145137  typedef std::map<Observable*, Channels *> ChannelMap;
    146138  static ChannelMap NotificationChannels;
    147 
    148   static PriorityLevel PriorityDefault;
    149 
    150 protected:
    151   typedef std::multimap<int,Observer*> callees_t;
    152   typedef std::set<Notification*> notificationSet;
    153   static std::map<Observable*, int> depth;
    154   static std::map<Observable*,callees_t> callTable;
    155   static std::map<Observable*,notificationSet> notifications;
    156   static std::set<Observable*> busyObservables;
    157 
    158   static boost::recursive_mutex ObservablesMapLock; //!< a lock for the pointer of the instance
    159139
    160140private:
  • src/CodePatterns/Observer/Relay.hpp

    re24dde r959c82  
    3636  virtual ~Relay();
    3737
    38   virtual void signOn(Observer *target, PriorityLevel priority = Observable::PriorityDefault) const;
     38  virtual void signOn(
     39      Observer *target,
     40      GlobalObservableInfo::PriorityLevel priority = GlobalObservableInfo::PriorityDefault) const;
    3941
    4042  virtual void signOff(Observer *target) const;
    4143
    42   virtual void signOn(Observer *target, size_t channelno, PriorityLevel priority = Observable::PriorityDefault) const;
     44  virtual void signOn(
     45      Observer *target,
     46      size_t channelno,
     47      GlobalObservableInfo::PriorityLevel priority = GlobalObservableInfo::PriorityDefault) const;
    4348
    4449  virtual void signOff(Observer *target, size_t channelno) const;
Note: See TracChangeset for help on using the changeset viewer.