예제 #1
0
void Foam::csvTableReader<Type>::operator()
(
    const fileName& fName,
    List<Tuple2<scalar, Type>>& data
)
{
    // IFstream in(fName);
    autoPtr<ISstream> inPtr(fileHandler().NewIFstream(fName));
    ISstream& in = inPtr();

    DynamicList<Tuple2<scalar, Type>> values;

    // Skip header
    if (headerLine_)
    {
        string line;
        in.getLine(line);
    }

    while (in.good())
    {
        string line;
        in.getLine(line);

        DynamicList<string> split;

        std::size_t pos = 0;
        while (pos != std::string::npos)
        {
            std::size_t nPos = line.find(separator_, pos);

            if (nPos == std::string::npos)
            {
                split.append(line.substr(pos));
                pos=nPos;
            }
            else
            {
                split.append(line.substr(pos, nPos-pos));
                pos=nPos+1;
            }
        }

        if (split.size() <= 1)
        {
            break;
        }

        scalar time = readScalar(IStringStream(split[timeColumn_])());
        Type value = readValue(split);

        values.append(Tuple2<scalar,Type>(time, value));
    }

    data.transfer(values);
}
예제 #2
0
	///////////////////////////////////////////////////////////////////////////
	// Write the next N bits
	// Inputs:
	//	int						nbrBits		The number of bits to write
	//	const unsigned char*	inBuffer	Buffer containing the bits, starting
	//										with the LSB of the first byte.
	///////////////////////////////////////////////////////////////////////////
	void BitStreamWrite::WriteBits(
		int nbrBits, 
		const unsigned char* inBuffer
	) {
		BitCPtr inPtr(inBuffer, 0);
		while (nbrBits > 0) {
			int availBits = endPtr - current;
			if (availBits > nbrBits) {
				availBits = nbrBits;
			}
			nbrBits -= availBits;
			bitsWritten += availBits;
			// TODO: Optimize the bit copy using bytewise shift/mask
			while (availBits != 0) {
				*current = (int)*inPtr;
				availBits--;
				++current;
				++inPtr;
			}
			if (nbrBits > 0) {
				// Buffer must be full; write it out
				byteWriter->Write(bufferSize, buffer);
				current = startPtr;
			}
		}
	}
예제 #3
0
파일: loadssb.cpp 프로젝트: YIwama/bcb
void convertSSBPipedFile(const std::string &tblFolder) {
  StopWatch watch;
  watch.init();
  scoped_array<char> inPtr(new char[IO_BUFFER_SIZE]);
  scoped_array<char> outPtr(new char[IO_BUFFER_SIZE]);
  char *inb = inPtr.get();
  char *outb = outPtr.get();
  convertOneSSBPipedFile<Customer>(inb, outb, tblFolder, "customer");
  convertOneSSBPipedFile<Date>(inb, outb, tblFolder, "date");
  convertOneSSBPipedFile<Lineorder>(inb, outb, tblFolder, "lineorder");
  convertOneSSBPipedFile<Part>(inb, outb, tblFolder, "part");
  convertOneSSBPipedFile<Supplier>(inb, outb, tblFolder, "supplier");
#ifndef _MSC_VER
  ::sync ();
#endif
  watch.stop();
  LOG(INFO) << "converted all SSB tbl files to bin files. " << watch.getElapsed() << " micsosec";
}