/[cvs]/api/Classes/String/StringInput.cpp
ViewVC logotype

Annotation of /api/Classes/String/StringInput.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Sun Jul 1 20:47:58 2001 UTC (23 years, 4 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

1 bearsoft 1.1 #include "StringInput.h"
2     #include "../Files/FileTools.h"
3     #include "String.h"
4    
5     //defaultValue is how many endTargetPointers,floatBuffer places their are reserved for
6    
7     StringInput::StringInput()
8     {
9     defaultValue=20;
10     internBuffer=0;
11     sourceBuffer=0;
12     endBuffer=0;
13     wordBuffer=0;
14     endTargetPointers=(int*)malloc((sizeof(int))*defaultValue);
15     endTargetPointers[0]=0;
16     fileSize=0;
17     defragMemory=1;
18     floatBuffer=0;
19     scanWordStatus=true;
20     cutAndPasteBuffer=0;
21     scanRowStatus=false;
22     nextRowPosition=0;
23     rowNumber=1;
24     stringTools=new StringTools();
25     }
26    
27     StringInput::~StringInput()
28     {
29     if (internBuffer != 0 )
30     {
31     free(internBuffer);
32     internBuffer=0;
33     }
34    
35     if (wordBuffer != 0 )
36     {
37     free(wordBuffer);
38     wordBuffer=0;
39     }
40    
41     if (endTargetPointers != 0)
42     {
43     free(endTargetPointers);
44     endTargetPointers=0;
45     }
46    
47     if (floatBuffer != 0)
48     {
49     free(floatBuffer);
50     floatBuffer=0;
51     }
52    
53     if (cutAndPasteBuffer != 0)
54     {
55     free(cutAndPasteBuffer);
56     floatBuffer=0;
57     }
58    
59     if (stringTools!=null)
60     {
61     delete stringTools;
62     }
63     }
64    
65    
66     // internBuffer=the start of the ascii buffer
67     // sourceBuffer=where the pointer is in the internBuffer
68     // endBuffer=the end of the internBuffer
69    
70     //////////////////////////////////////////////////////////////////////////////////////
71     //read a ascii file
72     //////////////////////////////////////////////////////////////////////////////////////
73    
74     void StringInput::readFile(char *filename)
75     {
76     if ( internBuffer != 0 )
77     {
78     free(internBuffer);
79     internBuffer=0;
80     }
81    
82     int fileBuffer=0;
83    
84     FileTools fileTools;
85    
86     fileStatus=fileTools.readStringFile(filename,&fileBuffer,&fileSize);
87    
88     internBuffer=(char*)fileBuffer;
89     sourceBuffer=(char*)internBuffer;
90     endBuffer=(char*)internBuffer;
91     endBuffer+=fileSize;
92     reserveWordBufferMemory();
93     scanWordStatus=true;
94     nextRowPosition=sourceBuffer;
95     rowNumber=1;
96     scanRowStatus=false;
97     }
98    
99     int StringInput::getFileStatus()
100     {
101     return fileStatus;
102     }
103    
104     //////////////////////////////////////////////////////////////////////////////////////
105     //can i read more words??
106     //////////////////////////////////////////////////////////////////////////////////////
107    
108     bool StringInput::getScanWordStatus()
109     {
110     return scanWordStatus;
111     }
112    
113     //////////////////////////////////////////////////////////////////////////////////////
114     //
115     //////////////////////////////////////////////////////////////////////////////////////
116    
117     bool StringInput::getScanEndFindWordStatus()
118     {
119     return scanEndFindWordStatus;
120     }
121    
122     //////////////////////////////////////////////////////////////////////////////////////
123     //is this the end of the row??
124     //////////////////////////////////////////////////////////////////////////////////////
125    
126     bool StringInput::getScanRowStatus()
127     {
128     bool tempScanRowStatus=scanRowStatus;
129    
130     if ( internBuffer != nextRowPosition )
131     {
132     if (scanRowStatus)
133     {
134     sourceBuffer=nextRowPosition;
135     scanRowStatus=false;
136     }
137     }
138    
139     return tempScanRowStatus;
140     }
141    
142     //////////////////////////////////////////////////////////////////////////////////////
143     //What for rowNumber are you on
144     //////////////////////////////////////////////////////////////////////////////////////
145    
146     int StringInput::getRowNumber()
147     {
148     return rowNumber;
149     }
150    
151     //////////////////////////////////////////////////////////////////////////////////////
152     //set a String to the InternBuffer
153     //////////////////////////////////////////////////////////////////////////////////////
154    
155     void StringInput::setInternBuffer(char *iInternBuffer)
156     {
157     if (iInternBuffer != null)
158     {
159     if (internBuffer != null)
160     {
161     free(internBuffer);
162     internBuffer=0;
163     }
164    
165     internBuffer=iInternBuffer;
166     fileSize=stringTools->sizeOfString(internBuffer);
167     sourceBuffer=(char*)internBuffer;
168     endBuffer=(char*)internBuffer;
169     endBuffer+=fileSize;
170     reserveWordBufferMemory();
171     scanWordStatus=true;
172     nextRowPosition=sourceBuffer;
173     rowNumber=1;
174     scanRowStatus=false;
175     }
176     }
177    
178     //////////////////////////////////////////////////////////////////////////////////////
179     //takes the start address from the internBuffer and copy its to the sourcebuffer pointer
180     //////////////////////////////////////////////////////////////////////////////////////
181    
182     void StringInput::resetScanWord()
183     {
184     sourceBuffer=internBuffer;
185     rowNumber=1;
186     nextRowPosition=internBuffer;
187     scanRowStatus=false;
188     scanWordStatus=true;
189     }
190    
191     //////////////////////////////////////////////////////////////////////////////////////
192     //dont defrag memory, input the buffer size where you can store the word, when you are shure how large words their can be
193     //////////////////////////////////////////////////////////////////////////////////////
194    
195     void StringInput::dontDefragMemory(int wordBufferSize)
196     {
197     if (wordBuffer!=0)
198     {
199     free(wordBuffer);
200     wordBuffer=0;
201     }
202    
203     wordBuffer=(char*)malloc(wordBufferSize);
204     defragMemory=0;
205     }
206    
207     //////////////////////////////////////////////////////////////////////////////////////
208     //reserve WordBuffer Memory
209     //////////////////////////////////////////////////////////////////////////////////////
210    
211     void StringInput::reserveWordBufferMemory()
212     {
213     if (defragMemory==0)
214     {
215     if (wordBuffer!=0)
216     {
217     free(wordBuffer);
218     wordBuffer=0;
219     }
220    
221     wordBuffer=(char*)malloc(fileSize);
222     }
223     }
224    
225     //////////////////////////////////////////////////////////////////////////////////////
226     //dont defrag memory, input the buffer size where you can store the word, when you are not shure how large words their can be
227     //////////////////////////////////////////////////////////////////////////////////////
228    
229     void StringInput::dontDefragMemory()
230     {
231     if ( internBuffer != 0 )
232     {
233     defragMemory=0;
234     reserveWordBufferMemory();
235     }
236     }
237    
238     //////////////////////////////////////////////////////////////////////////////////////
239     //takes the size of a pointerlist
240     //////////////////////////////////////////////////////////////////////////////////////
241    
242     int StringInput::sizeOfPointerList(int* pointerList)
243     {
244     int size=0;
245    
246     while( pointerList[size] != 0 )
247     {
248     size++;
249     }
250    
251     size++;
252    
253     return size;
254     }
255    
256     //////////////////////////////////////////////////////////////////////////////////////
257     //copy in endtargetpointers
258     //////////////////////////////////////////////////////////////////////////////////////
259    
260     int *StringInput::getEndTargetPointers()
261     {
262     return endTargetPointers;
263     }
264    
265     //////////////////////////////////////////////////////////////////////////////////////
266     //clear endtargetpointers
267     //////////////////////////////////////////////////////////////////////////////////////
268    
269     void StringInput::resetEndTargetPointers()
270     {
271     endTargetPointers[0]=0;
272     }
273    
274     //////////////////////////////////////////////////////////////////////////////////////
275     //seeks after next ascii character that not is a space in the internBuffer
276     //////////////////////////////////////////////////////////////////////////////////////
277    
278     void StringInput::skipSpace()
279     {
280     scanRowStatus=false;
281     int forward=0;
282     int sizeToEnd=endBuffer-sourceBuffer;
283    
284     while (forward < sizeToEnd)
285     {
286     if (sourceBuffer[0] == 13)
287     {
288     sourceBuffer++;
289     scanRowStatus=true;
290     nextRowPosition=sourceBuffer;
291     rowNumber++;
292     }
293     else
294     {
295     if( (sourceBuffer[0] == (' ')) || (sourceBuffer[0] == 10) )
296     {
297     sourceBuffer++;
298     }
299     else
300     {
301     forward=sizeToEnd;
302     }
303     }
304    
305     forward++;
306     }
307     }
308    
309     //////////////////////////////////////////////////////////////////////////////////////
310     //looking for next space in the ascii buffer (internBuffer)
311     //////////////////////////////////////////////////////////////////////////////////////
312    
313     int StringInput::nextSpace()
314     {
315     int size=0;
316     char *tempSourceBuffer=sourceBuffer;
317     int forward=0;
318     int sizeToEnd=endBuffer-sourceBuffer;
319    
320     while (forward < sizeToEnd)
321     {
322     if( (tempSourceBuffer[0] != (' ')) && (tempSourceBuffer[0] != 10) && (tempSourceBuffer[0] != 13) && (sourceBuffer[0] != 0) )
323     {
324     tempSourceBuffer++;
325     size++;
326     }
327     else
328     {
329     forward=sizeToEnd;
330     }
331    
332     forward++;
333     }
334    
335     return size;
336     }
337    
338     //////////////////////////////////////////////////////////////////////////////////////
339     //reads from the internBuffer to another buffer, so long their is no space
340     //////////////////////////////////////////////////////////////////////////////////////
341    
342     void StringInput::readToNextSpace(char *destBuffer)
343     {
344     scanRowStatus=false;
345     int forward=0;
346     int sizeToEnd=endBuffer-sourceBuffer;
347    
348     while (forward < sizeToEnd)
349     {
350     if( (sourceBuffer[0] != (' ')) && (sourceBuffer[0] != 10) && (sourceBuffer[0] != 13) )
351     {
352     destBuffer[0]=sourceBuffer[0];
353     sourceBuffer++;
354     destBuffer++;
355     }
356     else
357     {
358     forward=sizeToEnd;
359     }
360    
361     forward++;
362     }
363    
364     if( sourceBuffer[0] == 13 )
365     {
366     nextRowPosition=sourceBuffer+1;
367     scanRowStatus=true;
368     rowNumber++;
369     }
370    
371     }
372    
373     //////////////////////////////////////////////////////////////////////////////////////
374     //seeks after a word then it return it, like "nisse"
375     //////////////////////////////////////////////////////////////////////////////////////
376    
377     char *StringInput::scanWord()
378     {
379     scanWordStatus=false;
380     char *tBuffer=0;
381    
382     if (internBuffer != 0)
383     {
384     int onetime=0;
385     int sp=0;
386    
387     if ( sourceBuffer == internBuffer )
388     {
389     if ( sourceBuffer[0] != ' ' )
390     {
391     onetime=1;
392     }
393     }
394    
395     if ( onetime == 0 && sourceBuffer != endBuffer )
396     {
397     skipSpace();
398     }
399    
400     if ( sourceBuffer != endBuffer )
401     {
402     scanWordStatus=true;
403    
404     int fSize=nextSpace();
405     fSize+=1;
406    
407     if ( defragMemory == 0 )
408     {
409     tBuffer=wordBuffer;
410     }
411     else
412     {
413     if (wordBuffer!=0)
414     {
415     free(wordBuffer);
416     wordBuffer=0;
417     }
418    
419     wordBuffer=(char*)malloc(sizeof(char)*fSize);
420     tBuffer=wordBuffer;
421     }
422    
423     readToNextSpace(tBuffer);
424     tBuffer[fSize-1]=0;
425     }
426     }
427    
428     return tBuffer;
429     }
430    
431    
432     //////////////////////////////////////////////////////////////////////////////////////
433     //scan words in the internBuffer until it find it , of it does not find it, it returns null(0)
434     //////////////////////////////////////////////////////////////////////////////////////
435    
436     bool StringInput::findWord(char* word)
437     {
438     char *tBuffer=0;
439     bool statement=false;
440     bool end=true;
441     scanEndFindWordStatus=false;
442    
443     if ( sourceBuffer != endBuffer )
444     {
445     while (end)
446     {
447     tBuffer=scanWord();
448    
449     if ( tBuffer != 0 )
450     {
451     int e=0;
452    
453     while (endTargetPointers[e] != 0 && end == true)
454     {
455     if (stringTools->compareString(tBuffer,(char*)endTargetPointers[e]))
456     {
457     scanEndFindWordStatus=true;
458     statement=true;
459     end=false;
460     }
461    
462     e++;
463     }
464    
465     if (end)
466     {
467     if (stringTools->compareString(tBuffer,word))
468     {
469     statement=true;
470     end=false;
471     }
472     }
473     }
474     else
475     {
476     end=false;
477     }
478     }
479     }
480    
481     return statement;
482     }
483    
484     //////////////////////////////////////////////////////////////////////////////////////
485     //it seeks back and when it find the character it is looking for it takes the data that is forward and returns it
486     //////////////////////////////////////////////////////////////////////////////////////
487    
488     char *StringInput::findWordAndCutTheBack(char * word)
489     {
490     char *lBuffer=0;
491    
492     if (findWord(word))
493     {
494     char *tBuffer=scanWord();
495     int position=stringTools->backFind(tBuffer,92);
496     lBuffer=tBuffer+position+1;
497     }
498    
499     return lBuffer;
500     }
501    
502     //////////////////////////////////////////////////////////////////////////////////////
503     //it seeks back and when it find the character it is looking for it takes the data that is forward and returns it
504     //then it take the returned String data and add it together with another String data that it returns
505     //////////////////////////////////////////////////////////////////////////////////////
506    
507     char *StringInput::cutTheBackMergeStrings(char * word, char *target)
508     {
509     char *uBuffer=0;
510    
511     char *tBuffer=findWordAndCutTheBack(word);
512    
513     if ( tBuffer != 0 )
514     {
515     if (cutAndPasteBuffer!=0)
516     {
517     free(cutAndPasteBuffer);
518     cutAndPasteBuffer=0;
519     }
520    
521     cutAndPasteBuffer=stringTools->addStringTwoString(target,tBuffer);
522     uBuffer=cutAndPasteBuffer;
523     }
524    
525     return uBuffer;
526     }
527    
528     //////////////////////////////////////////////////////////////////////////////////////
529     //scanwords a number of times that is selected
530     //////////////////////////////////////////////////////////////////////////////////////
531    
532     bool StringInput::scanWordForwardLoop(int numberOfTimes)
533     {
534     bool statement=true;
535     int r=0;
536     char* tBuffer=0;
537    
538     while ( r<numberOfTimes && statement == true )
539     {
540     tBuffer=scanWord();
541    
542     if ( tBuffer != 0)
543     {
544     if (defragMemory!=0)
545     {
546     free(tBuffer);
547     tBuffer=0;
548     }
549     }
550     else
551     {
552     statement=false;
553     }
554    
555     r++;
556     }
557    
558     return statement;
559     }
560    
561    
562    
563     //////////////////////////////////////////////////////////////////////////////////////
564     //it looks for a word when it finds it , it takes the specified number of float data after the word and returns it
565     //if it finds a specified word that you have specified , it returns -1 (endtargert,endtarger2)
566     //////////////////////////////////////////////////////////////////////////////////////
567    
568     float *StringInput::findWordReturnFloats(char * word, int howManyScanForward, int numberOfFloats)
569     {
570     if ( floatBuffer != 0 )
571     {
572     free(floatBuffer);
573     floatBuffer=0;
574     }
575    
576     bool statement=findWord(word);
577    
578     if ( statement == true && scanEndFindWordStatus == false )
579     {
580     bool statement=scanWordForwardLoop(howManyScanForward);
581    
582     if (statement)
583     {
584     char *tBuffer=scanWord();
585     String tTemp=tBuffer;
586     int number=tTemp.toInt();
587    
588     int totalNumberOfFloats=(5+(numberOfFloats*3));
589     floatBuffer=(float*)malloc((sizeof(float)*totalNumberOfFloats)*number+sizeof(float));
590    
591     floatBuffer[0]=(float)number;
592    
593     for ( int n=0; n<number ; n++ )
594     {
595     for ( int n2=0; n2<totalNumberOfFloats ; n2++ )
596     {
597     tBuffer=scanWord();
598    
599     if ( tBuffer != 0)
600     {
601     String tTemp=tBuffer;
602     float fNumber=tTemp.toFloat();
603     floatBuffer[1+n2+n*totalNumberOfFloats]=fNumber;
604    
605     }
606     }
607     }
608     }
609     }
610    
611     return floatBuffer;
612     }
613    
614    
615    
616     //////////////////////////////////////////////////////////////////////////////////////
617     //it looks for a word when it finds it , it takes the specified number of float data after the word and returns it
618     //if it finds a specified word that you have specified , it returns -1 (endtargert,endtarger2)
619     //a special
620     //////////////////////////////////////////////////////////////////////////////////////
621    
622     float *StringInput::findAWordReturnFloats( char *word, int numberOf, float falseValue, int option)
623     {
624     if ( floatBuffer != 0 )
625     {
626     free(floatBuffer);
627     floatBuffer=0;
628     }
629    
630     bool statement=findWord(word);
631    
632     if ( statement == true && scanEndFindWordStatus == true )
633     {
634     if ( option != 2 )
635     {
636     floatBuffer=(float*)malloc(sizeof(float)*numberOf);
637    
638     for ( int r=0; r<numberOf; r++ )
639     {
640     floatBuffer[r]=falseValue;
641     }
642     }
643     }
644     else
645     {
646     if ( statement == true && scanEndFindWordStatus == false )
647     {
648     floatBuffer=(float*)malloc(sizeof(float)*numberOf);
649    
650     for ( int r=0; r<numberOf; r++ )
651     {
652     char *fBuffer=scanWord();
653     String fTemp=fBuffer;
654     floatBuffer[r]=fTemp.toFloat();
655    
656     if (defragMemory!=0)
657     {
658     free(fBuffer);
659     fBuffer=0;
660     }
661     }
662    
663     if ( ((char*)endTargetPointers[0]) != 0 && option == 1 )
664     {
665     bool statement=findWord((char*)endTargetPointers[0]);
666     }
667     }
668     }
669    
670     return floatBuffer;
671     }
672    
673    
674     bool StringInput::socketGetHttp(int socket)
675     {
676     NetWorkTools netWorkTools;
677     char *tempBuffer=netWorkTools.recieveHttpData(socket);
678     setInternBuffer(tempBuffer);
679    
680     if (tempBuffer!=null)
681     {
682     return true;
683     }
684    
685     return false;
686     }
687    
688     char *StringInput::getInternBuffer()
689     {
690     return internBuffer;
691     }

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26