Jump to content

Guppy

Members
  • Posts

    775
  • Joined

  • Last visited

Blog Entries posted by Guppy

  1. Guppy
    While having a small set of fairly simple tables you could properly get away with using
     

    Leadwerks::Interpreter::NewTable(); size_t top=Leadwerks::Interpreter::GetStackSize(); Leadwerks::Interpreter::PushString("Key1"); Leadwerks::Interpreter::PushString("Value1"); Leadwerks::Interpreter::SetTable(top); Leadwerks::Interpreter::PushString("Key2"); Leadwerks::Interpreter::PushInt(5); Leadwerks::Interpreter::SetTable(top); (ect)
     
    But it's really rather bothersome and hard to read and maintain.
     
    And it doesn't get easier when you have somewhat complex like the event table for the gui I'm working on;
     

    { event = "onChanged", value = 25.7, caption = "label", widget = { numChildren = 0, parent = "parentWidget", properties = { enabled = true, captoion = "label", visible = "true", class = "ScrollBar", }. id = "testScrollBar", children { }, doStuff: [function] } }
     
    Just imagine having to push that to lua using the above technique!
     
    Weather or not you think what I've come up with is easier to use/read/maintain is a matter of taste so I'll give you a preview;

    using namespace luaHelper; typeMap widgetBaseinfo={ {"id", new luaString(widget->getName()) }, {"parent", new luaString(widget->getParent() == nullptr? "": widget->getParent()->getName()) }, {"numChildren", new luaInt(widget->getChildCount()) }, {"UserStrings", new stringTable(widget->getUserStrings()) } }; typeMap properties={ {"visible", new luaBool(widget->getVisible()) }, {"class", new luaString(widget->getTypeName()) }, {"enabled", new luaBool(widget->getEnabled()) } }; widgetBaseinfo["properties"]=new luaTable(properties); typeMap event={ {"event", new luaString(eventType) }, {"widget" ,new luaTable(widgetBaseinfo) }, {"value", value }, } luaTable *table=new luaTable(event); table->push(); delete table;
     
    The above is more or less the code I use now ( except I generate widgetBaseinfo, properties and event in different member functions )
     
    if you like this way of working you can download the helper file here, and (ab)use it anyway you like
    http://decoder.dk/LE/lua_tablehelper.h
     
    ( aparently you cannot attach files in blog posts? )
     
     
    Let me know what you think.
     
    I've been considering letting table::push automatically delete it self since I always seem to do that anyway - and it would save me some worries about memory leaks from forgetting to delete.
×
×
  • Create New...