00001 #include <iostream>
00002 #include <stdexcept>
00003 #include "func.h"
00004 #include "element.h"
00005
00006 static enum ByteOrder byteOrder = LittleEndian;
00007
00008
00009 void setByteOrder(enum ByteOrder bo)
00010 {
00011 byteOrder = bo;
00012 }
00013
00014
00015
00016
00017
00018 Elements* createElements(Element* element)
00019 {
00020 Elements* e = new Elements();
00021 e->Add(element);
00022 return e;
00023 }
00024
00025
00026 Elements* addElement(Elements* elements,Element* element)
00027 {
00028 elements->Add(element);
00029 return elements;
00030 }
00031
00032
00033 Element* createElement(enum ComplexType type,Elements* elements,char* name)
00034 {
00035 Element *e = new ComplexElement(name,type,elements);
00036 free(name);
00037 return e;
00038 }
00039
00040
00041
00042 static int readNum(char* number)
00043 {
00044 int n = 0;
00045 if (number)
00046 {
00047 n = atoi(number);
00048 free(number);
00049 }
00050 return n;
00051 }
00052
00053
00054
00055 Element* createDefinedElement(char* type,char* name,char* number)
00056 {
00057 int n = readNum(number);
00058
00059
00060 ComplexElement *ce = ComplexElement::Find(type);
00061 free(type);
00062
00063
00064 if (!ce)
00065 throw std::runtime_error("");
00066
00067 return new DefinedElement(name, ce, n);
00068 }
00069
00070
00071
00072
00073 Element* createSimpleElement(int type,char* name,char* number)
00074 {
00075 int n = readNum(number);
00076
00077 Element* res;
00078 if (type==0)
00079 res = new PaddingElement(name,n==0?1:n);
00080 else
00081 res = new SimpleElement(name,type<0,type<0?-type:type,n);
00082 free(name);
00083 return res;
00084 }
00085
00086
00087 void processElement(enum ComplexType type,char* name,Elements* elements)
00088 {
00089 ComplexElement *ce = new ComplexElement(name,type,elements);
00090 free(name);
00091
00092 ce->Process(cout);
00093 }
00094