Skip to content

Commit

Permalink
objectionary#3542 introduce put with position for attrs
Browse files Browse the repository at this point in the history
  • Loading branch information
Suban05 committed Feb 19, 2025
1 parent 9077b63 commit 81b3afc
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 22 deletions.
7 changes: 6 additions & 1 deletion eo-runtime/src/main/java/org/eolang/AtComposite.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,14 @@ public Phi get() {
}

@Override
public void put(final int pos, final Phi phi) {
public void put(final Phi phi) {
throw new ExReadOnly(
"Can't overwrite lambda expression"
);
}

@Override
public void put(final int pos, final Phi src) {
this.put(src);
}
}
9 changes: 7 additions & 2 deletions eo-runtime/src/main/java/org/eolang/AtLogged.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,14 @@ public Phi get() {
}

@Override
public void put(final int pos, final Phi src) {
public void put(final Phi src) {
this.log.info(String.format(" %s.put()...\n", this.owner));
this.origin.put(pos, src);
this.origin.put(src);
this.log.info(String.format(" %s.put()!\n", this.owner));
}

@Override
public void put(final int pos, final Phi src) {
this.put(src);
}
}
12 changes: 11 additions & 1 deletion eo-runtime/src/main/java/org/eolang/AtOnce.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,22 @@ public Phi get() {
}

@Override
public void put(final int pos, final Phi phi) {
public void put(final Phi phi) {
throw new ExReadOnly(
String.format(
"Can't overwrite the \"%s\" attribute",
this.origin
)
);
}

@Override
public void put(final int pos, final Phi phi) {
throw new ExReadOnly(
String.format(
"There are no void attributes left, can't set the %s one",
pos
)
);
}
}
7 changes: 6 additions & 1 deletion eo-runtime/src/main/java/org/eolang/AtRho.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,14 @@ public Phi get() {
}

@Override
public void put(final int pos, final Phi phi) {
public void put(final Phi phi) {
if (this.rho.get() == null) {
this.rho.set(phi);
}
}

@Override
public void put(final int pos, final Phi src) {
this.put(src);
}
}
7 changes: 6 additions & 1 deletion eo-runtime/src/main/java/org/eolang/AtVoid.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public Phi get() {
}

@Override
public void put(final int pos, final Phi phi) {
public void put(final Phi phi) {
if (this.object.get() == null) {
this.object.set(phi);
} else {
Expand All @@ -101,4 +101,9 @@ public void put(final int pos, final Phi phi) {
);
}
}

@Override
public void put(final int pos, final Phi phi) {
this.put(phi);
}
}
5 changes: 5 additions & 0 deletions eo-runtime/src/main/java/org/eolang/AtWithRho.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public Phi get() {
return ret;
}

@Override
public void put(final Phi phi) {
this.origin.put(phi);
}

@Override
public void put(final int pos, final Phi phi) {
this.origin.put(pos, phi);
Expand Down
9 changes: 8 additions & 1 deletion eo-runtime/src/main/java/org/eolang/Attr.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,14 @@ public interface Attr {
/**
* Put a new object in.
*
* @param pos The position
* @param phi The object to put
*/
void put(Phi phi);

/**
* Put a new object with position of the attribute in.
*
* @param pos The position of the attribute
* @param phi The object to put
*/
void put(int pos, Phi phi);
Expand Down
34 changes: 20 additions & 14 deletions eo-runtime/src/main/java/org/eolang/PhDefault.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,24 +140,12 @@ public boolean hasRho() {

@Override
public void put(final int pos, final Phi object) {
this.attrObject(this.attr(pos), object).put(pos, object);
this.attribute(this.attr(pos), object).put(pos, object);
}

@Override
public void put(final String name, final Phi object) {
this.attrObject(name, object).put(0, object);
}

private Attr attrObject(final String name, final Phi object) {
if (!this.attrs.containsKey(name)) {
throw new ExUnset(
String.format(
"Can't #put(\"%s\", %s) to %s, because the attribute is absent",
name, object, this
)
);
}
return this.attrs.get(name);
this.attribute(name, object).put(object);
}

@Override
Expand Down Expand Up @@ -259,6 +247,24 @@ public final void add(final String name, final Attr attr) {
this.attrs.put(name, new AtWithRho(attr, this));
}

/**
* Get an attribute by name.
* @param name The name
* @param object The object
* @return The attribute
*/
private Attr attribute(final String name, final Phi object) {
if (!this.attrs.containsKey(name)) {
throw new ExUnset(
String.format(
"Can't #put(\"%s\", %s) to %s, because the attribute is absent",
name, object, this
)
);
}
return this.attrs.get(name);
}

/**
* Get attribute name by position.
* @param pos Position of the attribute
Expand Down
5 changes: 5 additions & 0 deletions eo-runtime/src/test/java/org/eolang/AtEnvelope.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ public Phi get() {
return this.origin.get();
}

@Override
public void put(final Phi phi) {
this.origin.put(phi);
}

@Override
public void put(final int pos, final Phi phi) {
this.origin.put(pos, phi);
Expand Down
2 changes: 1 addition & 1 deletion eo-runtime/src/test/java/org/eolang/PhDefaultTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ void failsCorrectlyWhenTooManyAttributesPut() {
Matchers.equalTo("There are no void attributes left, can't set the 1st one")
);
}

/**
* Rnd.
* @since 0.1.0
Expand Down

0 comments on commit 81b3afc

Please sign in to comment.