http://www.newton-inc.com/dev/techinfo/qa/qa.htm
FrameDirty
see changes to nested frames?FrameDirty
is fooled by changes to bytes within binary objects. Since strings are implemented as binary objects, this means that FrameDirty
will not see changes to individual characters in a string. Since clParagraphViews
try (as much as possible) to work by manipulating the characters in the string rather than by creating a new string, this means that FrameDirty
can be easily fooled by normal editing of string data.s := GetStores()[0]:CreateSoup("Test:DTS", []);
e := s:Add({slot: 'value, string: "A test entry", nested: {slot: 'notherValue}})
#4410B69 {slot: value,
String: "A test entry",
nested: {slot: notherValue},
_uniqueID: 0}
FrameDirty(e)
#2 NIL
e.string[0] := $a; // modify the string w/out changing its reference
FrameDirty(e)
#2 NIL
EntryChange(e);
e.string := "A new string"; // change the string reference
FrameDirty(e)
#1A TRUE
EntryChange(e);
e.nested.slot := 'newValue; // nested change, FrameDirty is deep.
FrameDirty(e)
#1A TRUE
s:RemoveFromStore() // cleanup.
evt.ex.fr.store
exceptions. These limits are for the encoded form that the data takes when written to a soup, which varies from the object's size in the NS heap.EntryFlushXMit
and EntryChangeXMit
?EntryFlushXMit
and EntryChangeXMit
is what will be done with the entry after the flush or change._proto
slots. The result is that the data will be written to the store, and a cached frame will exist. Often, this is exactly what is desired because the entry is still needed since it will soon be accessed or modified. EntryFlushXMit
is a better option; it writes the data to the soup without creating the cached entry.AddXMit
or EntryChangeXMit
. If the entry will not soon be used again (so it doesn't need to take up heap space with the cached frame), then use AddFlushedXmit
or EntryFlushXMit
.while entry do
begin
entry.fooCount := entry.fooCount + 1;
// nil appSymbol passed so don't broadcast
EntryFlushXMit(entry, nil);
entry := cursor:Next();
end; // Could broadcast now
foreach x in kInitialData do // if new, may not need broadcast
soup:AddFlushedXmit(Clone(x), nil);
soupDef
mechanism and putting the long name (typically without appended signature) in the 'userName
slot of that data structure.WhichEnd
cursor method returns the symbols 'begin
or 'end
, depending on where the cursor is in a soup. Why does NTK complain when I try to check for these symbols?if myCursor:WhichEnd() = '|begin| then
:WeAreAtBeginning();
EntryChange
on the modified entry I get a -48022 error. What is wrong?ClearVBOCache
while modifying VBOs. You can also work around the problem by putting the VBO in a soup entry and using EntryChangeXmit
or EntryFlushXmit
.ClearVBOCache
takes a reference to a VBO as an argument, and moves the dirty pages for a given VBO to the store, freeing up the system memory. Note that this function does not commit the changes to the VBO, while EntryChangeXmit
and EntryFlushXmit
do commit the changes.ClearVBOCache
. For example, modifying 32K of contiguous data, or a single byte in 32 different pages of one VBO, or even a single byte in 32 different VBOs all modify 32 total pages of VBO data. Don't do this too often, though. Calling ClearVBOCache
repeatedly for modifications to the same page of a VBO or when there are only a few modified pages will needlessly slow the machine.Stats()
is called: gc(); stats();
soup:AddToDefaultStoreXmit({ foo : "a test string"}, '|bar:SIG|);
gc(); stats();
soup:AddToDefaultStoreXmit({ foo : "another test string"}, '|bar:SIG|);
gc(); stats();
nil
for the changeSym
argument to the Xmit functions, no notification occurs and the deferred action is not created. Normally, this is a bad idea, since you want other applications to know about your soup changes. However, Xmit notification may not be necessary for specialized applications that use only their own application soups and do not publish information about reading/writing soup data for extensibility. nil
for the changeSym
to void immediate notification. Afterwards, use the XmitSoupChange
global function with the 'whatThe
symbol. (See the documentation for XmitSoupChange
for more information.)