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