1 // cccc_itm.cc
2
3 #include "cccc.h"
4 #include <fstream>
5
6 #include "cccc_itm.h"
7 #include <cstdio>
8 #include <cmath>
9
CCCC_Item(const string & s,char c)10 CCCC_Item::CCCC_Item(const string& s, char c)
11 {
12 buffer=s;
13 delimiter=c;
14 good=true;
15 }
16
CCCC_Item(const string & s)17 CCCC_Item::CCCC_Item(const string& s)
18 {
19 buffer=s;
20 delimiter='@';
21 good=true;
22 }
23
CCCC_Item()24 CCCC_Item::CCCC_Item()
25 {
26 buffer="";
27 delimiter='@';
28 good=true;
29 }
30
Insert(const string & s)31 bool CCCC_Item::Insert(const string& s)
32 {
33 buffer+=s;
34 buffer+=delimiter;
35 #if 0
36 cerr << buffer << endl;
37 #endif
38 return good;
39 }
40
Insert(const char * cptr)41 bool CCCC_Item::Insert(const char* cptr)
42 {
43 string s(cptr);
44 return Insert(s);
45 }
46
Extract(string & s)47 bool CCCC_Item::Extract(string& s)
48 {
49 size_t delimiter_position=buffer.find(delimiter);
50 if(delimiter_position!=string::npos)
51 {
52 good=true;
53 s=buffer.substr(0,delimiter_position);
54 string tempBuffer=buffer.substr(delimiter_position+1);
55 buffer=tempBuffer;
56 }
57 else
58 {
59 good=false;
60 }
61 return good;
62 }
63
Insert(int n)64 bool CCCC_Item::Insert(int n)
65 {
66 char numbuf[64];
67 sprintf(numbuf,"%d",n);
68 return Insert(numbuf);
69 }
70
Extract(int & n)71 bool CCCC_Item::Extract(int& n)
72 {
73 string numstr;
74 bool retval=Extract(numstr);
75 n=atoi(numstr.c_str());
76 return retval;
77 }
78
Insert(char c)79 bool CCCC_Item::Insert(char c)
80 {
81 char charbuf[2];
82 sprintf(charbuf,"%c",c);
83 return Insert(charbuf);
84 }
85
Extract(char & c)86 bool CCCC_Item::Extract(char& c)
87 {
88 string charstr;
89 bool retval=Extract(charstr);
90 if(charstr.size()==1)
91 {
92 c=charstr[0];
93 }
94 return retval;
95 }
96
Insert(float f)97 bool CCCC_Item::Insert(float f)
98 {
99 char numbuf[64];
100 sprintf(numbuf,"%f",f);
101 return Insert(numbuf);
102 }
103
Extract(float & f)104 bool CCCC_Item::Extract(float& f)
105 {
106 string numstr;
107 bool retval=Extract(numstr);
108 f=atof(numstr.c_str());
109 return retval;
110 }
111
ToFile(ofstream & ofstr)112 bool CCCC_Item::ToFile(ofstream& ofstr)
113 {
114 ofstr << buffer << endl;
115 good=ofstr.good();
116 return good;
117 }
118
FromFile(ifstream & ifstr)119 bool CCCC_Item::FromFile(ifstream& ifstr)
120 {
121 good=false;
122 char line_buffer[1024];
123 ifstr.getline(line_buffer,1023);
124 buffer=line_buffer;
125 if(ifstr.good() && buffer.size()>0 && buffer.size()<1023)
126 {
127 delimiter=buffer[buffer.size()-1];
128 good=true;
129 #if 0
130 cerr << "Delimiter is " << delimiter << endl;
131 #endif
132 }
133 return good;
134 }
135
136
137
138
139