diff --git a/prism/include/JDD.h b/prism/include/JDD.h index 8451d5f1..26a63a50 100644 --- a/prism/include/JDD.h +++ b/prism/include/JDD.h @@ -667,3 +667,22 @@ JNIEXPORT void JNICALL Java_jdd_JDD_DD_1ExportMatrixToSpyFile } #endif #endif +/* Header for class jdd_JDD_CuddOutOfMemoryException */ + +#ifndef _Included_jdd_JDD_CuddOutOfMemoryException +#define _Included_jdd_JDD_CuddOutOfMemoryException +#ifdef __cplusplus +extern "C" { +#endif +#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID +#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -3042686055658047285LL +#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID +#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -3387516993124229948LL +#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID +#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -7034897190745766939LL +#undef jdd_JDD_CuddOutOfMemoryException_serialVersionUID +#define jdd_JDD_CuddOutOfMemoryException_serialVersionUID -3094099053041270477LL +#ifdef __cplusplus +} +#endif +#endif diff --git a/prism/src/jdd/JDD.java b/prism/src/jdd/JDD.java index 071cd2bc..3ad0ecfb 100644 --- a/prism/src/jdd/JDD.java +++ b/prism/src/jdd/JDD.java @@ -121,6 +121,23 @@ public class JDD private static native void DD_ExportMatrixToMatlabFile(long dd, long rvars, int num_rvars, long cvars, int num_cvars, String name, String filename); private static native void DD_ExportMatrixToSpyFile(long dd, long rvars, int num_rvars, long cvars, int num_cvars, int depth, String filename); + /** + * An exception indicating that CuDD ran out of memory or that another internal error + * occurred. + *
+ * This exception is thrown by ptrToNode if a NULL pointer is returned by one of the native + * DD methods. It is generally not safe to use the CuDD library after this error occurred, + * so the program should quit as soon as feasible. + */ + public static class CuddOutOfMemoryException extends RuntimeException { + private static final long serialVersionUID = -3094099053041270477L; + + /** Constructor */ + CuddOutOfMemoryException() { + super("The MTBDD library CuDD seems to have run out of memory or encountered an internal error."); + } + } + static { try { @@ -1336,10 +1353,14 @@ public class JDD /** * Convert a (referenced) ptr returned from Cudd into a JDDNode. + *
Throws a CuddOutOfMemoryException if the pointer is NULL. *
[ REFS: none ] */ public static JDDNode ptrToNode(long ptr) { + if (ptr == 0L) { + throw new CuddOutOfMemoryException(); + } return new JDDNode(ptr); }