Титульная страница   Пространства имен   Иерархия классов   Алфавитный указатель   Классы   Файлы   Члены пространства имен   Члены классов   Члены файла  

stringbuf.cpp

См. документацию.
00001 /*
00002  * Copyright (C) Sergey P. Derevyago, 2003-2004.
00003  *
00004  * Permission to copy, use, modify, sell and distribute this software is granted
00005  * provided this copyright notice appears in all copies.
00006  * This software is provided "as is" without express or implied warranty, and
00007  * with no claim as to its suitability for any purpose.
00008  *
00009  */
00010 
00015 #include "stringbuf.hpp"
00016 #include <stdio.h>
00017 
00018 using namespace std;
00019 
00020 // макрос для определения тел конвертирующих операторов
00021 #define PLUS_BODY(form)       \
00022  char buf[25];                \
00023  sprintf(buf, "%" form, val); \
00024  tmps.add(buf);               \
00025  ptrs.add(&tmps.tail->val);   \
00026  return *this;
00027 
00028 StringBuf& StringBuf::operator+(int val)
00029 {
00030  PLUS_BODY("d")
00031 }
00032 
00033 StringBuf& StringBuf::operator+(unsigned int val)
00034 {
00035  PLUS_BODY("u")
00036 }
00037 
00038 StringBuf& StringBuf::operator+(long val)
00039 {
00040  PLUS_BODY("ld")
00041 }
00042 
00043 StringBuf& StringBuf::operator+(unsigned long val)
00044 {
00045  PLUS_BODY("lu")
00046 }
00047 
00048 #undef PLUS_BODY
00049 
00050 StringBuf::operator std::string() const
00051 {
00052  typedef StringBuf_private::Node<const string*> node_type;
00053  
00054  int len=0;
00055  for (node_type* ptr=ptrs.head; ptr; ptr=ptr->next) len+=ptr->val->size();
00056  
00057  string ret;
00058  ret.reserve(len);
00059 
00060  for (node_type* ptr=ptrs.head; ptr; ptr=ptr->next) ret.append(*ptr->val);
00061  return ret;
00062 }

Документация по ftext. Последние изменения: Sat Mar 20 17:58:15 2004. Создано системой doxygen1.3