bugGNU Octave - Bugs: bug #55755, mxGetProperty does not work with...

 
 

bug #55755: mxGetProperty does not work with properties marked as Dependent

Submitted by:  None
Submitted on:  Thu 21 Feb 2019 05:18:32 PM UTC  
 
Category:  Libraries Severity:  1 - Wish
Priority:  5 - Normal Item Group:  Matlab Compatibility
Status:  Confirmed Assigned to:  None
Originator Name:  Tim Originator Email:  -email is unavailable-
Open/Closed:  Open Release:  dev
Operating System:  Any

Add a New Comment (Rich Markup)
   

You are not logged in

Please log in, so followups can be emailed to you.

 

Thu 21 Feb 2019 06:44:23 PM UTC, comment #1: 

Confirmed with 4.4, 5, and default branch. I'm attaching a cleaned up and renamed version of the original example as propclass.m and proptest.c.

>> x = propclass;
>> proptest (x)
Actual property
Property: 10.000000
Dependent property
PropertyArray is a nullptr.

(file #46328, file #46329)

Mike Miller <mtmiller>
Project Administrator
Thu 21 Feb 2019 05:18:32 PM UTC, original submission:  

In the c-mex interface of matlab the mxGetProperty-function returns values of dependent properties. Using octaves mex-functions it instead returns nullptrs.
A simple example.

foo.m:
classdef foo
  properties
    bar = 10;
  end

  properties(Dependent)
    baaz
  end

  methods
    function out = get.baaz(this)
      out = this.bar * 2;
    end
  end
end

property_test.cpp:
#include "mex.h"
#include "matrix.h"
#include <cstdio>
#include <cstdlib>

void mexFunction(int OutputArgumentCount, mxArray* OutputArguments[], int InputArgumentCount, const mxArray* InputArguments[]) {
  printf("Actual property\n");
  {
    const mxArray* PropertyArray = mxGetProperty(InputArguments[0], 0, "bar");
    if ( PropertyArray ) {
      const double* Property = mxGetPr(PropertyArray);
      printf("Property: %f\n", Property[0]);
    } else {
      printf("PropertyArray is a nullptr.\n");
    }
  }
  printf("Dependent property\n");
  {
    const mxArray* PropertyArray = mxGetProperty(InputArguments[0], 0, "baaz");
    if ( PropertyArray ) {
      const double* Property = mxGetPr(PropertyArray);
      printf("Property: %f\n", Property[0]);
    } else {
      printf("PropertyArray is a nullptr.\n");
    }
  }
}

And running this whole thing on the shell:
octave:1> input = foo();
octave:2> input.bar
ans =  10
octave:3> input.baaz
ans =  20
octave:4> mex property_test.cpp -o ptest
octave:5> ptest(input)
Actual property
Property: 10.000000
Dependent property
PropertyArray is a nullptr.
octave:6>

In matlab accessing baaz this way would have yielded an array with its first value being 20, not a nullptr.

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

Attached Files
file #46328:  propclass.m added by mtmiller (228B - text/x-objcsrc)
file #46329:  proptest.c added by mtmiller (824B - text/x-csrc)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by None (Submitted the item)
  •  

    Do you think this task is very important?
    If so, you can add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.

     

     

     

    Follow 7 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2019-02-21 mtmiller Attached File- => Added propclass.m, #46328
        Attached File- => Added proptest.c, #46329
        CategoryOctave Function => Libraries
        Severity3 - Normal => 1 - Wish
        StatusNone => Confirmed
        Release4.4.1 => dev
        Operating SystemMicrosoft Windows => Any

    Back to the top


    Powered by Savane 3.5