Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

47
LINES

< > BotCompany Repo | #1030900 // _csetField [backup]

JavaX fragment (include)

1  
// returns true if change
2  
sbool _csetField(Concept c, S field, O value) ctex {
3  
  Field f = setOpt_findField(c.getClass(), field);
4  
  //print("cset: " + c.id + " " + field + " " + struct(value) + " " + f);
5  
  if (value instanceof RC) value = c._concepts.getConcept((RC) value);
6  
  value = deref(value);
7  
  
8  
  if (value instanceof S && l((S) value) >= concepts_internStringsLongerThan) value = intern((S) value);
9  
  
10  
  if (f == null) {
11  
    // dynamic field (undeclared)
12  
    
13  
    assertIdentifier(field);
14  
    O val2 = value instanceof Concept ? c.new Ref((Concept) value) : value;
15  
    O oldVal = mapGet(c.fieldValues, field);
16  
    if (oldVal instanceof Concept.Ref && val2 instanceof Concept.Ref)
17  
      // change existing reference
18  
      ((Concept.Ref) oldVal).set(((Concept.Ref) val2)!);
19  
    else if (val2 == null) {
20  
      // unindex & drop reference, drop dynamic field
21  
      if (oldVal != null) {
22  
        if (oldVal cast Concept.Ref)
23  
          oldVal.unindexAndDrop();
24  
        syncMapRemove(c.fieldValues, field);
25  
      }
26  
    } else
27  
      // create new reference
28  
      c.fieldValues = syncMapPut2_createLinkedHashMap(c.fieldValues, field, val2);
29  
    c.change();
30  
  } else if (isSubtypeOf(f.getType(), Concept.Ref.class)) {
31  
    // Concept.Ref magic
32  
    ((Concept.Ref) f.get(c)).set((Concept) derefRef(value));
33  
    c.change(); true;
34  
  } else if (isSubtypeOf(f.getType(), Concept.RefL.class)) {
35  
    // Concept.RefL magic
36  
    ((Concept.RefL) f.get(c)).replaceWithList(lmap derefRef((L) value));
37  
    c.change(); true;
38  
  } else {
39  
    O old = f.get(c);
40  
    if (neq(value, old)) {
41  
      f.set(c, value);
42  
      if (!isTransient(f)) c.change(); 
43  
      true;
44  
    }
45  
  }
46  
  false;
47  
}

Author comment

Began life as a copy of #1026007

download  show line numbers  debug dex  old transpilations   

Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt

No comments. add comment

Snippet ID: #1030900
Snippet name: _csetField [backup]
Eternal ID of this version: #1030900/1
Text MD5: 9f5806ce71e5a7216c7a72ef24098251
Author: stefan
Category: javax / concepts
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-04-07 23:40:39
Source code size: 1707 bytes / 47 lines
Pitched / IR pitched: No / No
Views / Downloads: 130 / 157
Referenced in: [show references]