00001
00002 #include "IOs.h"
00003
00004
00005
00006
00007 IOs::IOs(const char* file,frequenza** v,int n)
00008 {
00009 stream.open(file, ios::out | ios::binary);
00010 if (!stream) throw "apertura";
00011 for (int i = 0; i < 8; i++)
00012 buffer[i] = 0;
00013 contatore = 0;
00014 stream.put (char(n-1));
00015
00016
00017
00018
00019 for (int i = 0; i < n; i++)
00020 {
00021 stream.put(v[i] -> c);
00022 stream << v[i]->freq;
00023 if (i != n-1) stream << '-';
00024 if (i == n-1) stream << '|';
00025 }
00026 }
00027
00028 IOs::~IOs()
00029 {
00030 stream.close();
00031 }
00032
00033
00034
00035
00036
00037 void IOs::inserisci (int b)
00038 {
00039 buffer[contatore++] = b;
00040 if (contatore > 8) throw "contatore";
00041 if (contatore == 8)
00042 {
00043 int c = 0;
00044 for (int i = 0; i < 8; i++)
00045 if (buffer[i])
00046 c += elevato (2, (7-i));
00047 stream.put(char (c));
00048
00049
00050 contatore = 0;
00051 }
00052 }
00053
00054
00055
00056
00057
00058 void IOs::svuota ()
00059 {
00060 if (contatore == 0) return;
00061 int c = 0;
00062 for (int i = 0; i < contatore; i++)
00063 c += elevato (buffer[i]? 2:0, (7-i));
00064 stream.put(char (c));
00065
00066
00067 contatore = 0;
00068 }
00069
00070
00071 int IOs::elevato (int a, int b)
00072 {
00073 if (a == 0) return 0;
00074 int app = 1;
00075 for (int i = 0; i < b; i++)
00076 app *= a;
00077 return app;
00078 }