source: trunk/lang/matlab/rpUnitsDefineUnit.cc @ 3404

Last change on this file since 3404 was 3177, checked in by mmc, 12 years ago

Updated all of the copyright notices to reference the transfer to
the new HUBzero Foundation, LLC.

File size: 2.7 KB
Line 
1/*
2 * ----------------------------------------------------------------------
3 *  INTERFACE: Matlab Rappture Library Source
4 *
5 *    [unitsHandle,err] = rpUnitsDefineUnit(unitSymbol, basisHandle)
6 *
7 * ======================================================================
8 *  AUTHOR:  Derrick Kearney, Purdue University
9 *  Copyright (c) 2004-2012  HUBzero Foundation, LLC
10 *
11 *  See the file "license.terms" for information on usage and
12 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
13 * ======================================================================
14 */
15
16#include "RpMatlabInterface.h"
17
18/**********************************************************************/
19// METHOD: [unitsHandle,err] = rpUnitsDefineUnit(unitSymbol, basisHandle)
20/// Define a new Rappture Units type.
21/**
22 * Define a new Rappture Units type which can be searched for using
23 * @var{unitSymbol} and has a basis of @var{basisHandle}. Because of
24 * the way the Rappture Units module parses unit names, complex units must
25 * be defined as multiple basic units. See the RpUnits Howto for more
26 * information on this topic. A @var{basisHandle} equal to 0 means that
27 * the unit being defined should be considered as a basis. Unit names must
28 * not be empty strings.
29 *
30 * The first return value, @var{unitsHandle} represents the handle of the
31 * instance of the RpUnits object inside the internal dictionary. On
32 * success this value will be greater than zero (0), any other value is
33 * represents failure within the function. The second return value
34 * @var{err} represents the error code returned from the function.
35 *
36 * Error code, err=0 on success, anything else is failure.
37 */
38
39void mexFunction(int nlhs, mxArray *plhs[],
40                 int nrhs, const mxArray *prhs[])
41{
42    char *unitSymbol = NULL;
43    const RpUnits* basis = NULL;
44    RpUnits* myUnit = NULL;
45    int retHandle = 0;
46    int basisHandle = 0;
47    int retIndex = 0;
48    int err = 1;
49
50    /* Check for proper number of arguments. */
51    if (nrhs != 2)
52        mexErrMsgTxt("Two input required.");
53    else if (nlhs > 2)
54        mexErrMsgTxt("Too many output arguments.");
55
56    unitSymbol = getStringInput(prhs[0]);
57    basisHandle = getIntInput(prhs[1]);
58
59    /* Call the C subroutine. */
60    if (basisHandle > 0) {
61        basis = getObject_UnitsStr(basisHandle);
62    }
63
64    if (unitSymbol) {
65        myUnit = RpUnits::define(unitSymbol,basis);
66
67        if (myUnit) {
68            retHandle = storeObject_UnitsStr(myUnit->getUnitsName());
69            if (retHandle) {
70                err = 0;
71            }
72        }
73    }
74
75    /* Set C-style string output_buf to MATLAB mexFunction output*/
76    plhs[0] = mxCreateDoubleScalar(retHandle);
77    plhs[1] = mxCreateDoubleScalar(err);
78
79    return;
80}
Note: See TracBrowser for help on using the repository browser.