powerflow/line.cpp

Go to the documentation of this file.
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 // IMPLEMENTATION OF CORE LINKAGE: line
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 

GridLAB-DTM Version 1.0
An open-source project initiated by the US Department of Energy