00001
00042 #include <stdlib.h>
00043 #include <stdio.h>
00044 #include <errno.h>
00045 #include <math.h>
00046 #include <iostream>
00047 using namespace std;
00048
00049 #include "line.h"
00050
00051 CLASS* line::oclass = NULL;
00052 CLASS* line::pclass = NULL;
00053 CLASS *line_class = NULL;
00054
00055 line::line(MODULE *mod) : link(mod) {
00056 if(oclass == NULL)
00057 {
00058 pclass = link::oclass;
00059
00060 line_class = oclass = gl_register_class(mod,"line",PC_BOTTOMUP|PC_POSTTOPDOWN);
00061 if(oclass == NULL)
00062 GL_THROW("unable to register object class implemented by %s",__FILE__);
00063
00064 defaults = this;
00065 configuration = NULL;
00066 length = 0;
00067 }
00068 }
00069
00070 int line::create()
00071 {
00072 int result = link::create();
00073 memcpy(this,defaults,sizeof(line));
00074 return result;
00075 }
00076
00077 int line::isa(char *classname)
00078 {
00079 return strcmp(classname,"line")==0 || link::isa(classname);
00080 }
00081
00082
00084
00086
00094 EXPORT int create_line(OBJECT **obj, OBJECT *parent)
00095 {
00096 try
00097 {
00098 *obj = gl_create_object(line::oclass,sizeof(line));
00099 if (*obj!=NULL)
00100 {
00101 line *my = OBJECTDATA(*obj,line);
00102 gl_set_parent(*obj,parent);
00103 return my->create();
00104 }
00105 }
00106 catch (char *msg)
00107 {
00108 gl_error("create_line: %s", msg);
00109 }
00110 return 1;
00111 }
00112
00113 EXPORT TIMESTAMP sync_line(OBJECT *obj, TIMESTAMP t0, PASSCONFIG pass)
00114 {
00115 line *pObj = OBJECTDATA(obj,line);
00116 try {
00117 if (pass==PC_BOTTOMUP)
00118 return pObj->sync(t0);
00119 else
00120 {
00121 TIMESTAMP t1 = pObj->postsync(t0);
00122 obj->clock = t0;
00123 return t1;
00124 }
00125 } catch (const char *error) {
00126 GL_THROW("%s (line:%d): %s", pObj->get_name(), pObj->get_id(), error);
00127 return 0;
00128 } catch (...) {
00129 GL_THROW("%s (line:%d): %s", pObj->get_name(), pObj->get_id(), "unknown exception");
00130 return 0;
00131 }
00132 }
00133
00134 EXPORT int init_line(OBJECT *obj)
00135 {
00136 line *my = OBJECTDATA(obj,line);
00137 try {
00138 return my->init();
00139 }
00140 catch (char *msg)
00141 {
00142 GL_THROW("%s (line:%d): %s", my->get_name(), my->get_id(), msg);
00143 return 0;
00144 }
00145 }
00146
00147 EXPORT int isa_line(OBJECT *obj, char *classname)
00148 {
00149 return OBJECTDATA(obj,line)->isa(classname);
00150 }
00151