00001 #include <string.h>
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 class CHARACTER {
00035 public:
00036 CHARACTER(char* cstring);
00037 CHARACTER(char* cstring, const size_t lstr);
00038 ~CHARACTER();
00039 CHARACTER operator()(size_t index);
00040 void pad(size_t first,size_t howmany=1);
00041 void operator=(char* str);
00042 operator char*();
00043 public:
00044 char* rep;
00045 size_t len;
00046 };
00047
00048 inline CHARACTER::CHARACTER(char* cstring)
00049 : rep(cstring), len(strlen(cstring))
00050 {};
00051
00052 inline CHARACTER::CHARACTER(char* cstring, const size_t lstr)
00053 : rep(cstring), len(lstr)
00054 {
00055
00056 size_t slen = strlen(rep);
00057 size_t actual = (slen < len)? slen : len;
00058 for(size_t i=actual;i<len;i++) rep[i]=' ';
00059 }
00060
00061 inline CHARACTER::~CHARACTER() {
00062 if(rep[len] == '\0') return;
00063
00064 for(int i=len-1;i>=0;i--) {
00065 if(rep[i] == '\0') break;
00066
00067 if(rep[i] != ' ') {
00068 rep[i+1] = '\0';
00069 break;
00070 }
00071 }
00072 }
00073
00074 inline CHARACTER CHARACTER::operator()(size_t index)
00075 {
00076
00077
00078 size_t pos = index*len;
00079 CHARACTER element(rep+pos,len);
00080 return element;
00081 }
00082
00083 inline void CHARACTER::pad(size_t first,size_t howmany)
00084 {
00085
00086 size_t pos=0,i=0,stop=first+howmany-1;
00087 for(size_t index=first; index<=stop; index++) {
00088 pos = index*len;
00089 size_t slen = strlen(rep+pos);
00090 size_t actual = (slen < len)? slen : len;
00091 for(i=pos+actual;i<pos+len;i++) rep[i]=' ';
00092 }
00093 }
00094
00095 inline void CHARACTER::operator=(char* str)
00096 {
00097 strncpy(rep,str,len);
00098 rep[len-1] = '\0';
00099 size_t slen = strlen(rep);
00100 size_t actual = (slen < len)? slen : len;
00101 for(size_t i=actual;i<len;i++) rep[i]=' ';
00102 }
00103
00104 inline CHARACTER::operator char*()
00105 {
00106 return rep;
00107 }