About
To utilize features of the MAXON API it is typically needed to allocate an object that provides access to data and functions. These objects can either be simple C++ structures and classes or reference classes representing implementations of interfaces.
Object Creation
Simple objects can be allocated using the following memory management tools of the MAXON API. If it is necessary to allocate objects directly, these functions should always be used instead of the standard C++ allocators.
- Note
 - If possible, one should always use reference counting. See References.
 
For allocation of low-level memory see Memory Allocation.
 
class ExampleClass
{
public:
  
  
  
  
  {
    _number = number;
  }
  
  
  
  {
    _number = 0;
  }
  
  
  
  
  {
    return _number;
  }
  
  
  
  
  {
    _number = number;
  }
 
private:
};
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:202
 
#define MAXON_IMPLICIT
Definition: apibase.h:186
 
    
 
  
 
  
  const 
maxon::
Int number = exampleObject->GetNumber();
 
 
  // delete the object
  DeleteObj(exampleObject);
maxon::Int Int
Definition: ge_sys_math.h:60
 
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:170
 
The maxon namespace contains all declarations of the MAXON API.
Definition: autoweight.h:14
 
#define NewObj(T,...)
Definition: newobj.h:108
 
#define iferr_return
Definition: resultbase.h:1524
 
 Most complex classes of the MAXON API provide a (static) "Create()" function that can be used to create new instances. It is recommended to add such a "Create()" function also to a custom class if it must be initialized after creation.
 
class AscendingNumbers
{
private:
  
  
  
  
  
  
  {
 
    
    _numbers.Flush();
 
    
    {
    }
  }
 
private:
 
public:
  
  
  
  
  
  
  {
    
    
    AscendingNumbersRef ref(numbers);
    
    
    return ref.Disconnect();
  }
 
  
  
  
  
  {
  }
 
  
  
  
  
  
  {
    
 
    if (undershoot || overshoot)
 
  }
 
  
  
  
  
  
  {
  }
};
Py_ssize_t i
Definition: abstract.h:645
 
Definition: basearray.h:415
 
MAXON_ATTRIBUTE_FORCE_INLINE Int GetCount() const
Definition: basearray.h:585
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom(COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
Definition: collection.h:261
 
PyObject PyObject Py_ssize_t start
Definition: complexobject.h:62
 
PyObject PyObject Py_ssize_t Py_ssize_t end
Definition: complexobject.h:63
 
Py_ssize_t * index
Definition: abstract.h:374
 
PyObject * src
Definition: abstract.h:305
 
bool Bool
boolean type, possible values are only false/true, 8 bit
Definition: apibase.h:195
 
static auto Create(ARGS &&... args)
Definition: apibase.h:2818
 
return OK
Definition: apibase.h:2735
 
Int GetCount(const ITERABLE &iterable)
Definition: collection.h:37
 
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
 
#define iferr_scope
Definition: resultbase.h:1389
 
    
 
  
 
  
 
  
  AscendingNumbersRef ref(numbers);
 
  
  {
  }
Py_ssize_t count
Definition: abstract.h:640
 
for(i=0;i< length;i++)
Definition: unicodeobject.h:61
 
BaseRef< T, StrongRefHandler > StrongRef
Definition: baseref.h:1048
 
  
Interface References
A reference object represents an implementation of a given interface. Such a reference object can be created in various ways. For details see Interface Basics and Using Interfaces.
- Note
 - References to interfaces with only one implementation can often be allocated on the stack e.g. maxon::String.
 
This example shows how a reference class instance is created using the maxon::Id of the specific implementation:
  
  
 
  
  const maxon::Id id { 
"net.maxonexample.class.somesimpleclass" };
 
 
  
 
  
  const SimpleClassRef simpleClass = componentClass.Create() 
iferr_return;
 
 
  
  simpleClass.SetNumber(123);
  const maxon::Int number = simpleClass.GetNumber();
 
 
Definition: objectbase.h:696
 
Definition: apibaseid.h:243
 
 This example shows how to obtain a reference class from an implementation that is presented as a published object. See Published Objects Usage.
  
  
 
  
  
  
  const SimpleClassRef simpleClass = SomeSimpleClass().Create() 
iferr_return;
 
 
  
  simpleClass.SetNumber(456);
  const maxon::Int number = simpleClass.GetNumber();
 
 
 Interface implementations can also be registered at registries. From these registries the reference class is obtained using the specific maxon::Id of the registered implementation. See Registry Usage.
  
 
  
  const maxon::Id redID { 
"net.maxonexample.class.colors.red" };
 
 
  if (componentClass == nullptr)
 
  
  const ColorRef color = componentClass->Create() 
iferr_return;
 
 
  
 
 
Definition: string.h:1237
 
A color consisting of three components R, G and B.
Definition: col.h:16
 
 Interfaces support inheritance. This means a given reference object of a base class can be cast into the reference class of a derived interface. If the cast is not possible a nullptr is returned.
- maxon::Cast(): Casts the object into the given interface type.
 
- maxon::AssertCast(): Casts the object into the given interface type. Checks only, if the object is really an instance of the interface in debug mode.
 
  
 
  
 
  
  {
    const maxon::Error 
error = 
res.GetError();
 
 
    if (
error.IsInstanceOf<maxon::ErrnoError>())
 
    {
      
 
      const maxon::ErrnoError errnoError = maxon::Cast<maxon::ErrnoError>(
error);
 
      const maxon::Int        errorCode  = errnoError.GetErrorCode();
 
 
    }
  }
PyObject * error
Definition: codecs.h:206
 
Py_UCS4 * res
Definition: unicodeobject.h:1113
 
static const ERROR_FAILED FAILED
Definition: resultbase.h:68
 
  
Further Reading