#include <iterator>
#include <iostream>
#include <vector>
#include <fstream>
 
struct Vector3 
{
    float x, y, z;
};
 
struct  joint_angle
{
    int count;
    Vector3 orient;
};
 
struct pose
{
    float time;
    std::vector<joint_angle> angle;
};
 
std::vector<pose> posture;
 
// opérateur pour lire un "joint_angle"
std::istream & operator>> (std::istream & stream, joint_angle & ja) 
{
    ja.count = 0;
    stream >> ja.orient.x >> ja.orient.y >> ja.orient.z;
    return stream;
}
 
// opérateur pour lire un "pose"
std::istream & operator>> (std::istream & stream, pose & p) 
{
    p.time = 0;
    std::copy(std::istream_iterator<joint_angle>(stream), std::istream_iterator<joint_angle>(), std::back_inserter(p.angle));
    return stream;
}
 
// pour lire un fichier
int main()
{
    std::ifstream stream("fichier.txt" );
    if (stream)
    {
        // test operator >> joint_angle
        joint_angle ja;
        stream >> ja;
 
        // test operator >> pose
        pose p;
        stream >> p;
    }
}
 
				CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnN0cnVjdCBWZWN0b3IzIAp7CiAgICBmbG9hdCB4LCB5LCB6Owp9OwoKc3RydWN0ICBqb2ludF9hbmdsZQp7CiAgICBpbnQgY291bnQ7CiAgICBWZWN0b3IzIG9yaWVudDsKfTsKIApzdHJ1Y3QgcG9zZQp7CiAgICBmbG9hdCB0aW1lOwogICAgc3RkOjp2ZWN0b3I8am9pbnRfYW5nbGU+IGFuZ2xlOwp9OwogCnN0ZDo6dmVjdG9yPHBvc2U+IHBvc3R1cmU7CgovLyBvcMOpcmF0ZXVyIHBvdXIgbGlyZSB1biAiam9pbnRfYW5nbGUiCnN0ZDo6aXN0cmVhbSAmIG9wZXJhdG9yPj4gKHN0ZDo6aXN0cmVhbSAmIHN0cmVhbSwgam9pbnRfYW5nbGUgJiBqYSkgCnsKICAgIGphLmNvdW50ID0gMDsKICAgIHN0cmVhbSA+PiBqYS5vcmllbnQueCA+PiBqYS5vcmllbnQueSA+PiBqYS5vcmllbnQuejsKICAgIHJldHVybiBzdHJlYW07Cn0KIAovLyBvcMOpcmF0ZXVyIHBvdXIgbGlyZSB1biAicG9zZSIKc3RkOjppc3RyZWFtICYgb3BlcmF0b3I+PiAoc3RkOjppc3RyZWFtICYgc3RyZWFtLCBwb3NlICYgcCkgCnsKICAgIHAudGltZSA9IDA7CiAgICBzdGQ6OmNvcHkoc3RkOjppc3RyZWFtX2l0ZXJhdG9yPGpvaW50X2FuZ2xlPihzdHJlYW0pLCBzdGQ6OmlzdHJlYW1faXRlcmF0b3I8am9pbnRfYW5nbGU+KCksIHN0ZDo6YmFja19pbnNlcnRlcihwLmFuZ2xlKSk7CiAgICByZXR1cm4gc3RyZWFtOwp9CiAKLy8gcG91ciBsaXJlIHVuIGZpY2hpZXIKaW50IG1haW4oKQp7CiAgICBzdGQ6Omlmc3RyZWFtIHN0cmVhbSgiZmljaGllci50eHQiICk7CiAgICBpZiAoc3RyZWFtKQogICAgewogICAgICAgIC8vIHRlc3Qgb3BlcmF0b3IgPj4gam9pbnRfYW5nbGUKICAgICAgICBqb2ludF9hbmdsZSBqYTsKICAgICAgICBzdHJlYW0gPj4gamE7CiAgICAKICAgICAgICAvLyB0ZXN0IG9wZXJhdG9yID4+IHBvc2UKICAgICAgICBwb3NlIHA7CiAgICAgICAgc3RyZWFtID4+IHA7CiAgICB9Cn0K