Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re^2: ItemStyle causing high memory consumption

by ghosh123 (Monk)
on Apr 16, 2012 at 16:18 UTC ( #965348=note: print w/replies, xml ) Need Help??

in reply to Re: ItemStyle causing high memory consumption
in thread ItemStyle causing high memory consumption

Hello zentara, Thanks for replying. A more elaborated exapmle could be like this say in :

my $style1 = $tree-> ItemStyle ('text', -anchor => 'w', -font => 'Time +s 12',-justify => 'right'); $tree->ItemConfigure($self->treeEntryPath, $self->columnNo(), -text => + $result , -style => $style1 )

Similarly for $style2 in

my $style2 = $tree->ItemStyle ('text', -anchor => 'e', -font => 'Couri +er 16' -foreground => 'red', -justify => 'left'); $tree->ItemConfigure($self->treeEntryPath, $self->columnNo(), -text => + $name , -style => $style2 )

Posting a running example would be difficult since it is part of big code base. All I need is to program the logic so that in place of $style1 or $style2 , I will call a base class function which will create the itemStyle there once for each parameter set and return it to the derived class. Say from, I will call it like :

$style1 = $baseObject->getItemStyle($tree, 'text',-anchor =>'nw', -fg +=> 'red');

I need help in programming the logic in the getItemStyle() of base class, so that it can create the ItemStyle widget from the passed parameter and store them in a hash. So that for the same parameter combination later I don't need to create it again. From the hash key-value pair I will get the stored ItemStyle created earlier.

Replies are listed 'Best First'.
Re^3: ItemStyle causing high memory consumption
by zentara (Archbishop) on Apr 16, 2012 at 18:23 UTC
    To be honest, I'm not very agile with object oriented programming , although I can work thru it, if I had code to run. In your case, from reading the description of your classes, it seems that you could define all the ItemStyles in your B base class, if is derived from Tk::Tree, then make all your D1 , D2, etc. classes as Derived from B. See perldoc Tk::Derived. That way they all inherit the settings. You might want to look at Using the Option Database. Possibly setting the the Option Database is the way to avoid the memory gain problems. Possibly in you could access the $mw with the SUPER. Something along the lines of
    sub ClassInit { my ($class, $mw) = @_; $class->SUPER::ClassInit($mw); $mw->optionAdd("*tree*font", $text_font); $mw->optionAdd("*tree*foreground", $fgcolor); return $class; }
    I'm sorry I can't help you further, maybe some Object Oriented monk can help you, but I'm totally non-OO in my thinking style. :-)

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh

      Hi Zentara, Thanks for all your posts. Let me make my requirement very simple. Forget about object oriented programming a also whether is derived from Tk::Tree or not. Just think about procedural programming. I just need to build the logic where the called function (i.e getItemStyle )can stringify the passed parameter set and make them the key of a hash. The value of the hash shoud be the created ItemStyle object. I am trying to write the pseudocode below :

      &getItemStyle($tree, 'text', -anchor => 'w',-fg => 'red'); sub getItemStyle { my $obj = shift; ## holds $tree my $type = shift; ## holds text ## Now stringify the "-anchor =>'w' -fg => 'red' ## and make them a hash key and create the ItemStyle. ## So that next time if I call getItemStyle with same ## same parameters(-anchor and -fg ), it does not create ## the ItemStyle all over again and checks the hash if ## the paramters exist as a key then returns its value. ## Also we need to sort the parameters so that if we ## cal getItemStyle with the same two parameters and ## reverse the order of mentioning them (-fg => red , ## -anchor =>'w') , it considers it as the same call ## as (-anchor => 'w', -fg =>red) happened earlier .

      Hope the problem is clear now. Main thing is to elegantly and easily stringify the parameters, use them as a hash key, store the object in the value corresponding to that key and return. If it is a new parameter set, then make a new key and create the itemstyle.

        Hope the problem is clear now

        Sorry, I don't see why you should need to jump thru all these hoops, just to set a common ItemStyle, and why it would decrease the memory usage. However, it's your code and you see things with more clarity.

        I'm not really a human, but I play one on earth.
        Old Perl Programmer Haiku ................... flash japh
Re^3: ItemStyle causing high memory consumption
by zentara (Archbishop) on Apr 16, 2012 at 20:33 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://965348]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2018-10-20 21:14 GMT
Find Nodes?
    Voting Booth?
    When I need money for a bigger acquisition, I usually ...

    Results (119 votes). Check out past polls.